Проектирование сервера для служб синхронного ввода-вывода - PullRequest
0 голосов
/ 02 марта 2012

В настоящее время я пытаюсь выбрать проект для сервера TCP, в котором службы, которые будут предоставлены сервером, состоят из выполнения синхронного ввода-вывода (тонны запросов к БД - существующий код!)

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

В основном все клиентские запросы являются результатом взаимодействия с человеком, поэтому частота низкая, но время отклика должно быть максимально быстрым.

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

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

В настоящее время я склоняюсь к использованию пула потоков с числом потоков, которое на самом деле больше, чем число ядер, так как потоки в основном будут блокироваться в любом случае.

Будет ли такой дизайн разумным? Какие альтернативы существуют для сервера с этими требованиями?

1 Ответ

0 голосов
/ 02 марта 2012

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

200 постоянных подключений к базам данных, однако, кажется очень большим!Вы можете объединить их или использовать пул потоков для доступа к БД с подходящими межпоточными связями.

...