Отличный ответ, спасибо за информацию.

леднее время я много читал о многопоточности, так как хочу разработать высокопроизводительный, масштабируемый TCP-сервер, способный обрабатывать до 10 000–20 000 клиентов, каждый из которых последовательно обменивается данными с сервером с помощью команд на основе двунаправленной связи. система. Сервер получит команду и выполнит одну (или несколько) задач в соответствии с командой. Мой вопрос заключается в том, как правильно использовать потоковые конструкции .NET для различных ситуаций, выполняя задачи, которые могут занять от одной минуты до нескольких часов, в зависимости от выполняемой работы.

Больше всего меня смущает тот факт, что везде, где я читаю, я вижу что-то вроде «использования созданного вручную потока (или пользовательского пула потоков) для обработки« долгосрочных »задач и использования TPL для краткосрочных задач или задач, требует параллельной обработки. " Что именноявляется длительная задача? Это 5 секунд, 60 секунд, час?

С какими временными рамками я должен использовать каждый из этих трех методов создания потоков:

Созданные вручную темыКласс .NET ThreadPoolTPL

Еще одна проблема, которую я рассмотрел, заключается в следующем: скажем, к моему серверу действительно подключено 20 000 клиентов, каждый из которых отправляет 1 команду (которая может переводиться в одну или несколько задач) в секунду. Даже при наличии мощного оборудования, не существует ли шанса, что я смогу перенести слишком большую рабочую нагрузку в любую имеющуюся у меня очередь потоков / очередь рабочих элементов, тем самым в конечном итоге сгенерировав исключение OutOfMemoryException после того, как очередь медленно заполняется до максимума?

Любое понимание будет с благодарностью.

Ответы на вопрос(4)

Ваш ответ на вопрос