Parallel.For становится однопоточным ближе к концу - PullRequest
0 голосов
/ 20 апреля 2019

Есть проблема, с которой я сейчас сталкиваюсь в Parallel.For. Я пытаюсь запустить пакет из ~ 1000 довольно долго выполняющихся задач (каждая из которых выполняется в течение примерно 120 секунд), и моя проблема заключается в том, что на последних 10-20 итерациях обработка становится однопоточной.

псевдокод:

Parallel.For(0, 1000,
           (i, loopState)=> 
           {
            //Do lots of work
            Thread.Sleep(120_000);
           });

Ребята, вы знаете, почему это происходит, и как можно решить эту проблему?

1 Ответ

0 голосов
/ 21 апреля 2019

Я думаю, что выяснил проблему или, по крайней мере, нашел решение, которое устраняет ее.

К сожалению, пример кода в моем вопросе не был на 100% представителем моего кода, в моем коде я имелиспользовал перегрузку с localInit и localFinally.Я думал, что это не имеет значения, но, кажется, это имеет значение.

Я предполагаю, что при этом внутренняя реализация разбила мои итерации цикла и статически присвоила каждому разделу отдельный поток.Так как каждому элементу требовалось огромное количество времени для обработки, один раздел занимал намного больше времени, чем другие, и, следовательно, однопоточность.

Исправление состояло в том, чтобы использовать перегрузку, на которую ссылается мой вопрос,которая, похоже, не страдает от этой проблемы.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...