этот вопрос больше подразумевается, что вы думаете. первый Tparallel предназначен для работы только по конкретному случаю. для Exemple
это хорошо делать с tparallel
TParallel.For(1, Max, procedure (I: Integer)
begin
Do_processor_intensive_work
end);
это должно быть избежать:
TParallel.For(1, Max, procedure (I: Integer)
begin
do_waiting_proc_like_downloading_url
end);
почему? и вот где я отвечаю на ваш вопрос: это потому, что Tparallel создает количество потоков, которые соответствуют количеству процессора (виртуального или физического), доступного в системе. поэтому, если у вас 32 процессора, тогда он создаст максимум 32 потока, если у вас всего один процессор, тогда он создаст только один поток. это также глобально для всего приложения, если у вас есть 2 потока, каждый из которых делает Tparalell, у вас не будет более одного потока процессором
, поэтому идея, представляющая собой Tparallel, заключается в том, что вам не нужно беспокоиться о количестве потока, система выбирает наиболее оптимальное для вас количество.но, как вы видите в моем примере, если ваш tparallel не является интенсивным процессором, вам, вероятно, понадобится больше потоков, чем количество доступных процессоров, и в этом случае я сильно стараюсь избежать tparallel и вместо этого использовать TanonymousThread
вы можете переопределить это число, выполнив SetMaxWorkerThreads (по умолчанию это число процессоров), но если вам нужно это сделать, им очень повезло, что вы должны вообще избегать использования Tparallel и использовать вместо этого TanonymousThread