Потоки против параллельной обработки - PullRequest
33 голосов
/ 25 февраля 2010

Microsoft .NET 4.0 представляет новые "параллельные улучшения" в своей структуре. Мне интересно, в чем разница между созданием приложения, использующего стандартные функции System.Threading, и новыми параллельными улучшениями.

Ответы [ 4 ]

40 голосов
/ 25 февраля 2010

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

Поток, созданный с использованием new Thread(...) или ThreadPool.QueueUserWorkItem, завершится в совершенно неопределенный момент времени. Если вы напишите этот код:

ThreadPool.QueueUserWorkItem(() =>
    {
        Thread.Sleep(1000);
        Console.WriteLine("Work Finished");
    });
Console.WriteLine("Item Queued");

Текст Item Queued появится сразу, а Work Finished будет напечатан примерно через 1 секунду.

С другой стороны, если вы пишете нечто подобное с использованием параллельных расширений:

Parallel.For(0, 10, i =>
    {
        Thread.Sleep(1000);
        Console.WriteLine("Test {0}", i);
    });
Console.WriteLine("Finished");

В этом случае вы увидите задержку в 1 секунду, прежде чем что-либо произойдет, затем набор «тестовых» сообщений в произвольном порядке и , затем текст Finished.

Другими словами, параллельное выполнение задач на самом деле не влияет на ход программы. Он будет запускать разные задачи в разных потоках, чтобы их можно было выполнять на нескольких ядрах ЦП, чтобы улучшить общую пропускную способность программы, но для обычного программиста эти задачи на самом деле не выполняются в "фоновом режиме". «как они были бы с резьбой. Вам не нужно менять структуру вашей программы или делать что-то особенное, чтобы получать уведомления о завершении работы. У вас нет контроля над тем, что происходит внутри параллельного блока, но вы точно знаете, что блок не вернет управление, пока все параллельные задачи не будут завершены.

Хотя Parallel Extensions отлично подходят для этого, стоит упомянуть, что PX вообще бесполезен, когда на самом деле требуется для запуска задачи в фоновом режиме, такой как реализация планировщика или делегирование в рабочий поток чтобы пользовательский интерфейс был отзывчивым. Вам все еще нужно использовать потоки или асинхронные компоненты для них.

5 голосов
/ 25 февраля 2010

Вот хороший канал9, который я недавно смотрел на эту тему: http://channel9.msdn.com/posts/philpenn/Parallel-Programming-with-NET-Parallel-Extensions/

1 голос
/ 25 февраля 2010

Параллельная структура использует модель потоков .NET, которая, в свою очередь, основана на модели потоков Windows. Однако в общей структуре была проведена большая оптимизация, чтобы сделать параллельную библиотеку более эффективной.

Этот блог содержит дополнительные сведения.

0 голосов
/ 25 февраля 2010

Параллельная обработка - это просто необычный интерфейс для автоматического создания потоков. Для большинства задач проще использовать расширение параллельной обработки.

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