Отличный ответ, спасибо за информацию.
леднее время я много читал о многопоточности, так как хочу разработать высокопроизводительный, масштабируемый TCP-сервер, способный обрабатывать до 10 000–20 000 клиентов, каждый из которых последовательно обменивается данными с сервером с помощью команд на основе двунаправленной связи. система. Сервер получит команду и выполнит одну (или несколько) задач в соответствии с командой. Мой вопрос заключается в том, как правильно использовать потоковые конструкции .NET для различных ситуаций, выполняя задачи, которые могут занять от одной минуты до нескольких часов, в зависимости от выполняемой работы.
Больше всего меня смущает тот факт, что везде, где я читаю, я вижу что-то вроде «использования созданного вручную потока (или пользовательского пула потоков) для обработки« долгосрочных »задач и использования TPL для краткосрочных задач или задач, требует параллельной обработки. " Что именноявляется длительная задача? Это 5 секунд, 60 секунд, час?
С какими временными рамками я должен использовать каждый из этих трех методов создания потоков:
Созданные вручную темыКласс .NET ThreadPoolTPLЕще одна проблема, которую я рассмотрел, заключается в следующем: скажем, к моему серверу действительно подключено 20 000 клиентов, каждый из которых отправляет 1 команду (которая может переводиться в одну или несколько задач) в секунду. Даже при наличии мощного оборудования, не существует ли шанса, что я смогу перенести слишком большую рабочую нагрузку в любую имеющуюся у меня очередь потоков / очередь рабочих элементов, тем самым в конечном итоге сгенерировав исключение OutOfMemoryException после того, как очередь медленно заполняется до максимума?
Любое понимание будет с благодарностью.