W TPL można używać WithDegreeOfParallelism
na ParallelEnumerable
lub ParallelOptions.MaxDegreeOfParallism
Istnieje również CountdownEvent
które mogą być lepszym rozwiązaniem, jeśli tylko przy użyciu niestandardowych tematów lub zadań.
W wersji ThreadPool
, gdy używasz SetMaxThreads
, globalnie dla AppDomain
, więc możesz potencjalnie ograniczyć niepowiązany kod niepotrzebnie.
Nie można ustawić liczby wątków roboczych lub liczby wątków zakończenia operacji we/wy na liczbę mniejszą niż liczba procesorów w komputerze.
Jeśli hostuje się wspólne środowisko uruchomieniowe języka, na przykład przez Internetowe usługi informacyjne (IIS) lub serwer SQL, host może ograniczyć lub zablokować zmiany wielkości puli wątków.
Należy zachować ostrożność podczas zmiany maksymalnej liczby wątków w puli wątków. Chociaż twój kod może przynieść korzyści, zmiany mogą mieć niekorzystny wpływ na używane biblioteki kodów.
Ustawienie zbyt dużego rozmiaru wątku może spowodować problemy z wydajnością. Jeśli jednocześnie wykonywanych jest zbyt wiele wątków, narzut przełączania zadań staje się znaczącym czynnikiem.
Zgadzam się z drugą odpowiedź, że należy wykorzystać TPL nad ThreadPool
jak jego lepszym abstrakcji wielowątkowości, ale jego możliwe do osiągnięcia tego, co chcesz w obu.
Czy jesteś absolutnie pewny, że musisz kontrolować ilość uruchomionych wątków? Lub po prostu trzeba kontrolować liczbę bieżących prac? – Gusdor