Новый поток на соединение клиента в сервере сокета?

Я пытаюсь оптимизировать многочисленные связи во время к серверу сокета TCP.

Это считают хорошей практикой, или даже рациональное инициировать новый поток в сервере слушания каждый раз, когда я получаю запрос на установление соединения?

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

Платформа является C#, платформа Моно, целевой ОС является CentOS, RAM 2.4G, сервер находится на облаках, и я ожидаю приблизительно 200 запросов на установление соединения в секунду.

8
задан Olaseni 24 March 2010 в 05:33
поделиться

1 ответ

Нет, у вас не должно быть одного потока на соединение. Вместо этого вы должны использовать асинхронные методы (BeginAccept/EndAccept, BeginSend/EndSend и т.д.). Они гораздо эффективнее используют системные ресурсы.

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

.
8
ответ дан 5 December 2019 в 20:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: