В настоящее время я создаю приложение серверного типа, которое будет выполнять обычное прослушивание подключений от внешних клиентов и, когда они подключаются, обрабатывать запросы и т. Д.
В данный момент моя реализация создает пару потоков при каждом подключении клиента. Один поток просто читает запросы из сокета и добавляет их в очередь, а второй читает запросы из очереди и обрабатывает их.
Я в основном ищу мнения о том, считаете ли вы, что все эти темы являются излишними, и важно то, что этот подход вызовет у меня проблемы.
Важно отметить, что большую часть времени эти потоки будут простаивать - я использую маркеры ожидания (ManualResetEvent) в обоих потоках. Поток Reader ожидает, пока сообщение не станет доступным, и, если это так, читает его и помещает в очередь для потока Process. Поток Process ожидает, пока считыватель не сообщит, что сообщение находится в очереди (опять же, с помощью дескриптора ожидания). Если конкретный клиент действительно не забивает сервер, эти потоки будут сидеть в ожидании. Это дорого?
Я провел небольшое тестирование - к нему постоянно подключалось 1000 клиентов - сервер (а значит, более 2000 потоков), и казалось, что он неплохо справляется.