Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Наименьшая из зол - вопрос по скорости/ресурсам для сервера


SV ©   (2002-03-23 09:38:00) 

Hi, мастера, мне нужен совет. Надо сделать сервер для 40-50 клиентов. Есть 3 варианта:
1) Каждому клиенту свой поток
(т.к. распред. поцессорного времени по потокам-> моему процессу больше времени, но огоромное число переключений тормозит систему)
2) Всё через перекрытый ввод-вывод или select или AsyncEvent, etc
(На счет произв. не знаю, но одному 1 потоку кант времени на одного)
3) 1 поток на n клиентов
(компромисное решение)

WaitForMultipleMastersHelp(INFINITE)
/SV/


SV   (2002-03-27 21:37:00) [1]

Вот тут ещё информацию дали: сервер должен на W2000 работать-> можно порты завершения использовать. Там как раз пулы. Как считаете - решение подходящее?


paul_shmakov   (2002-03-25 01:39:00) [2]

microsoft советует использовать везде асинхронный ввод/вывод, что позволяет достичь максимальной производительности с минимальным overhead-ом. хотя программировать его несколько сложнее, чем синхронный ввод/вывод.

кстати, по первому пункту не соглашусь в "но огоромное число переключений тормозит систему": обычно при синхронной обработке, например, тех же сокетов (т.е. работе с сокетами в блокирующем режиме) потоки большую часть времени простаивают в ожидании появления данных. так что количество переключений контекстов не так уж велико.

лучший вариант - это использовать асинхронный ввод/вывод и динамический пул потоков, количество потоков в котором будет менятся в зависимости от нагрузки на сервер. но не стоит делать большое количество потоков в пуле - 3-4 - это максимум.
ну а при низкой нагрузке - 1-2.

в пуле - рабочие потоки, которые и будут выполнять полезную работу. еще один поток - диспетчер, принимающий информацию об асинхронных операциях и помещающий эту информацию в очередь для обработки рабочими потоками.


Наверх

Титульная страница Поиск, карта сайта Написать письмо