Hello, RapMan!
You wrote on Tue, 24 Jul 2007 14:07:51 GMT:
R> У меня небольшой вопрос: скока можна создать потоков в одном приложении? R> если есть 4 ГБ оперативки?
Столько на сколько хватит ресурсов у ОС. Но зачем вам это? Больше потоков,
не означает — быстрее. Слишком большое кол-во потоков принесет не пользу, а
вред.
With best regards, Slava Antonov. E-mail: deadbeef@so.yandex.ru
Здравствуйте, RapMan, Вы писали:
RM>У меня небольшой вопрос: скока можна создать потоков в одном приложении? если есть 4 ГБ оперативки?
стоит учесть, что при создании потока резервируется память для стека
и если вы используете TThread, то ее количество определяется параметром Max Stack Size и по умолчанию равно 1Mb(более подробную информацию смотрите по BeginThread)
стоит также учесть, что в общем случае приложение может адресовать только 2Gb памяти
Здравствуйте, Спильный Андрей, Вы писали:
СА>Здравствуйте, RapMan, Вы писали:
RM>>У меня небольшой вопрос: скока можна создать потоков в одном приложении? если есть 4 ГБ оперативки?
СА>стоит учесть, что при создании потока резервируется память для стека СА>и если вы используете TThread, то ее количество определяется параметром Max Stack Size и по умолчанию равно 1Mb(более подробную информацию смотрите по BeginThread) СА>стоит также учесть, что в общем случае приложение может адресовать только 2Gb памяти
Согласен с выше сказанным, но выделить 2000 потоков врядли получиться. Система скорее всего умрёт смертью храбрых. Если больше хочеться — переходите на 64битные системы. Но может обясните смысл кол-ва потоков? вот в работающей ХР обычно больше 400 их не бывает (это на всё систему!)
Иногда задача может решиться созданием пула потоков.
Здравствуйте, OdesitVadim, Вы писали:
OV>Согласен с выше сказанным, но выделить 2000 потоков врядли получиться. Система скорее всего умрёт смертью храбрых.
они не только нормально создаются, но и активно работают без видимых проблем
увеличение этого значения на один/два порядка тоже вполне допустимо
OV>Если больше хочеться — переходите на 64битные системы.
не вижу связи OV>Но может обясните смысл кол-ва потоков?
любое серверное приложение, ожидающее подключения клиентов по TCP (на обслуживание сокета создается тред) OV>вот в работающей ХР обычно больше 400 их не бывает (это на всё систему!)
это не серверная система
Здравствуйте, Спильный Андрей, Вы писали:
СА>Здравствуйте, OdesitVadim, Вы писали:
OV>>Если больше хочеться — переходите на 64битные системы. СА>не вижу связи
Памяти больше может быть. На 32битных системах 4 гигабайта.(2^32) на 64битных — 2^64. OV>>Но может обясните смысл кол-ва потоков? СА>любое серверное приложение, ожидающее подключения клиентов по TCP (на обслуживание сокета создается тред)
ага. если они вовремя не умирают, то система легко доситься.
При нескольких тысячах даже серверные платформы часто падают на колени.
Поэтому и придумали пул потоков. Потоков создаётся ограниченое количество, а клиентов в очередь. OV>>вот в работающей ХР обычно больше 400 их не бывает (это на всё систему!) СА>это не серверная система
В исходном вопросе это не уточнялось. Но я думаю что при тысяче-другой работающих потоков даже блокнот подтормаживать будет.
Здравствуйте, Спильный Андрей, Вы писали:
OV>>Но может обясните смысл кол-ва потоков? СА>любое серверное приложение, ожидающее подключения клиентов по TCP (на обслуживание сокета создается тред)
Не факт! Так создаётся туча спящих потоков. А реализовать можно и в один. Пул — самый гибкий выход (ИМХО).
До onlina, Andy-C
Re[4]: TThread
От:
Аноним
Дата:
25.07.07 16:32
Оценка:
Здравствуйте, Спильный Андрей, Вы писали:
СА>любое серверное приложение, ожидающее подключения клиентов по TCP (на обслуживание сокета создается тред)
Каждый работающий поток = переключение контекста. А оно далеко не бесплатно. Потому и были введены I/O completion ports, а архитектуры "сокет = поток" признаны немасштабируемыми.
Здравствуйте, Аноним, Вы писали:
А>Каждый работающий поток = переключение контекста. А оно далеко не бесплатно. Потому и были введены I/O completion ports, а архитектуры "сокет = поток" признаны немасштабируемыми.
вы пытались сделать онлайновый игровой сервер используя IOCP?
Re[6]: TThread
От:
Аноним
Дата:
31.07.07 17:17
Оценка:
Здравствуйте, Спильный Андрей, Вы писали:
СА>вы пытались сделать онлайновый игровой сервер используя IOCP?
Собираюсь в ближайшее время
А что за проблемы при этом возникают? Если речь про потенциально большой лаг — аргумент НЕ принимается.