Создавайте явные потоки и управляйте ими только в том случае, если вы ожидаете, что эти потоки будут работать долго, ИЛИ вам нужно, чтобы этот поток выполнялся как можно скорее .Даже тогда вам, вероятно, лучше использовать параллельную библиотеку задач и пометить задачу как долгосрочную.
Пул потоков поддерживает пул "живых" потоков, которые простаивают.Поэтому, когда вы звоните QueueUserWorkItem
, весьма вероятно, что будет пустой поток, который может захватить вашу работу и уйти.Это не всегда так, но часто так и есть.При создании нового потока (т. Е. var t = new Thread(...)
), всегда некоторые накладные расходы при запуске.
Кроме того, пул потоков позволяет установить максимальное количество потоков пула и управляет им.рабочая нагрузка.Таким образом, если вы разрешите четыре потока пула и поставите в очередь десять рабочих элементов, пул потоков обеспечит одновременную работу только четырех потоков пула.В некотором смысле вы можете думать о нем как о неявном семафоре, поскольку он не позволяет запускать более четырех потоков одновременно.Но он позволяет ставить в очередь столько, сколько вы хотите (в пределах некоторого большого системного предела).