Если у вас ограниченное количество потоков, вы можете столкнуться с тупиковыми ситуациями, если задача, выполняющаяся в потоке пула, отправляет новую задачу в очередь, а затем ожидает эту задачу - если нет свободного потока, то новая задачане будет запущен, и исходная задача будет заблокирована, удерживая поток пула до тех пор, пока не сможет быть запущена новая задача.Если у вас будет достаточно этих заблокированных задач, тогда весь пул может зайти в тупик.
На самом деле это не поможет, если ограничить количество задач, если только оно не совпадает с числом потоков ---когда каждый поток что-то делает, вы больше не можете отправлять новые задачи.
Что помогает, так это (а) добавление новых потоков, когда поток блокируется таким образом, или (б) если задача потока пулаожидание другой задачи из того же пула, после чего этот поток переключается на выполнение ожидаемой задачи.
Если у вас неограниченное количество потоков, вам нужно следить за переподпиской - если у меня есть квад-core, но отправьте 1000 задач и запустите 1000 потоков, тогда они будут конкурировать друг с другом и замедлять все.
На практике количество потоков ограничено некоторым большим количеством ОС либо из-зажестко запрограммированное число или из-за ограничений памяти - каждому потоку нужен новый стек, поэтому вы можете иметь только столько потоковs, поскольку у вас есть память для их стеков.
Вы всегда можете получить взаимоблокировку с 2 задачами, если они ждут друг друга, независимо от используемой вами схемы, если только вы не начинаете принудительно завершать задачи по истечении определенного времени.
Проблема с принудительно завершающими задачами имеет две стороны.Во-первых, вам нужно сообщить любому коду, который ожидал эту задачу, чтобы задача была принудительно завершена, а не завершена.Во-вторых (и это более важная проблема), вы не знаете, в каком состоянии находилась задача. Возможно, она владела блокировкой или любыми другими ресурсами, и принудительное завершение задачи приведет к утечке этих ресурсов и потенциально оставит приложение вплохое состояние.