лучший подход для многопоточного сервера на .net? - PullRequest
0 голосов
/ 07 февраля 2010

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

  1. Чтение данных из потока сокетов (отправлено с устройства)
  2. Анализ байтовых данных в бизнес-объектах
  3. Использование бизнес-объектов для обработки запросов с использованием базы данных через слой ado.net
  4. Отправить ответ в двоичном виде на устройство

Все вышеперечисленные шаги обрабатываются за доли секунды.

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

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

Какой должен быть мой подход для разработки максимально эффективного сервера, а затем для тестирования этого сервера емкость обработки запросов для проверки.

Спасибо

1 Ответ

3 голосов
/ 07 февраля 2010

Мне нравится, что вы делаете с пулом потоков. Мое единственное предложение - ограничить пул, потому что по умолчанию он составляет 50 потоков в пуле, что гораздо больше, чем то, что я читал. Переключение контекста с таким количеством потоков может стать смешным. Ограничьте его в 3-5 раз числом ядер, имеющихся на сервере.

Тестирование это довольно просто. Если вы просто добавите строку, чтобы изменить количество потоков, добавьте точный таймер. Как только вы напишите другое небольшое приложение для запуска множества запросов к серверу, посмотрите, сколько потоков быстрее. Если вы измените больше кода, чем это, получите сервер SVN на машине и разветвите код с различными версиями и протестируйте с помощью вышеупомянутого приложения для тестирования и таймера.

...