Я пытаюсь оптимизировать многочисленные связи во время к серверу сокета TCP.
Это считают хорошей практикой, или даже рациональное инициировать новый поток в сервере слушания каждый раз, когда я получаю запрос на установление соединения?
В какое время я должен начать волноваться о сервере на основе этой инфраструктуры? Каков максимум никакие из фоновых потоков, я могу работать, пока он больше не имеет никакого смысла?
Платформа является C#, платформа Моно, целевой ОС является CentOS, RAM 2.4G, сервер находится на облаках, и я ожидаю приблизительно 200 запросов на установление соединения в секунду.
Нет, у вас не должно быть одного потока на соединение. Вместо этого вы должны использовать асинхронные методы (BeginAccept/EndAccept, BeginSend/EndSend и т.д.). Они гораздо эффективнее используют системные ресурсы.
В частности, каждый создаваемый вами поток добавляет накладные расходы в виде переключения контекста, пространства в стеке, пропусков кэша и так далее. Linux лучше справляется с этим, чем, например, Windows, но это не повод давать вам право создавать столько потоков, сколько захотите ;)
.