Параллельный.на или Task.startnew в многопоточном процессе - PullRequest
2 голосов
/ 22 марта 2012

У меня есть список строк, которые мне нужно передать процессу в другом классе.То, что я хочу знать, какую из двух идей лучше использовать с точки зрения скорости, эффективности и параллельной обработки.Список содержит + - 10000 строк, и я хочу соответствующим образом ограничить потоки, чтобы одновременно выполнялось только 5 потоков:

For i as integer = 0 to searchPages.Count - 1
    Parallel.For(0,10,Sub(x)
                        ps.processPage(searchPages.Item(i))
                 End Sub)
Next

Фабрика задач, кажется, работает нормально, но не уверена, какую реализовать.

For i as integer = 0 to searchPages.Count - 1
    Dim fact as Task=Task.Factory.StartNew(Sub() ps.processPage(searchPages.Item(i)))
    If i = 11 then
           Tasks.Task.WaitAll()
    Endif

Next

Любые идеи приветствуются.

Ответы [ 2 ]

6 голосов
/ 22 марта 2012

Для этого типа чистого параллелизма данных я бы рекомендовал использовать Parallel.ForEach:

Parallel.ForEach(searchPages, Sub(page) ps.processPage(page))

Если вы хотите ограничить это использование 5 потоков, вы можете сделать это через ParallelOptions.MaxDegreeOfParallelism.:

Dim po as New ParallelOptions
po.MaxDegreeOfParallelism = 5
Parallel.ForEach(searchPages, po, Sub(page) ps.processPage(page))

Это будет иметь меньшие накладные расходы, чем Task.Factory.StartNew, так как разбиение внутри класса Parallel будет повторно использовать Задачи и предотвращать возникновение избыточного планирования.Он также будет использовать текущий поток для некоторой обработки вместо того, чтобы переводить его в состояние ожидания, что также сократит общую нагрузку.

2 голосов
/ 22 марта 2012

На вашем месте я бы не слишком беспокоился о том, сколько потоков используется (если только вы не докажете, что это проблема).Просто используйте Parallel.ForEach и позвольте среде выполнения отработать оптимальное количество потоков.

Посмотрите ответы на этот вопрос, чтобы получить некоторые подробные сведения о том, как потоки управляютсявремя выполнения для вас.

...