Читаем C# 4.0 полное руководство - 2011 полностью

// Распараллелить цикл методом For.

Parallel.For(0, data.Length, MyTransform);

Console.WriteLine("Основной поток завершен.");

}

}

Эта программа состоит из двух циклов. В первом, стандартном, циклеforинициализируется массивdata.А во втором цикле, выполняемом параллельно методомFor , над каждым элементом массиваdataпроизводится преобразование. Как упоминалось выше, это преобразование носит произвольный характер и выбрано лишь для целей демонстрации. МетодFor автоматически разбивает вызовы методаMyTransform на части для параллельной обработки отдельных порций данных, хранящихся в массиве. Следовательно, если запустить данную программу на компьютере с двумя доступными процессорами или больше, то цикл преобразования данных в массиве может быть выполнен методомFor параллельно.

Следует, однако, иметь в виду, что далеко не все циклы могут выполняться эффективно, когда они распараллеливаются. Как правило, мелкие циклы, а также циклы, состоящие из очень простых операций, выполняются быстрее последовательным способом, чем параллельным. Именно поэтому циклforинициализации массива данных не распараллеливается методомFor в рассматриваемой здесь программе. Распараллеливание мелких и очень простых циклов может оказаться неэффективным потому, что время, требующееся для организации параллельных задач, а также время, расходуемое на переключение контекста, превышает время, экономящееся благодаря параллелизму. В подтверждение этого факта в приведеннрм ниже примере программы

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

// Продемонстрировать отличия во времени последовательного //и параллельного выполнения цикла for.

using System;

using System.Threading.Tasks; using System.Diagnostics;

class DemoParallelFor { static int[] data;

// Метод, служащий в качестве тела параллельно выполняемого цикла.

// Операторы этого цикла просто расходуют время ЦП для целей демонстрации, static void MyTransform(int i) { data[i] = data[i] / 10;

if(data[i] < 1000) data[i] = 0;

if(data[i] > 1000 & data[i] < 2000) data[i] = 100; if(data[i] > 2000 & data[i] < 3000) data[i] = 200; if(data[i] > 3000) data[i] = 300;

}

static void Main {

Console.WriteLine("Основной поток запущен.");

// Create экземпляр объекта типа Stopwatch // для хранения времени выполнения цикла.

Stopwatch sw = new Stopwatch ;

data = new int[100000000];

// Инициализировать данные, sw.Start ';

// Параллельный вариант инициализации массива в цикле.

Перейти на страницу:

Похожие книги

Access 2002: Самоучитель
Access 2002: Самоучитель

В книге рассматривается широкий круг вопросов, связанных с использованием программной среды Access 2002, которая является составной частью пакета Office 2002 и предназначена для создания банка данных в самых различных предметных областях.Подробно описывается методика проектирования объектов базы данных (таблицы, формы, отчеты, страницы доступа к данным, запросы, модули).Детально обсуждаются вопросы создания интегрированной базы данных в единой среде Access 2002: формирование БД с нуля, конвертирование в программную среду баз данных, созданных в ином программном окружении – Clarion, FoxPro.Особое внимание уделяется формированию разнообразных запросов к интегрированной базе данных Access 2002 с использованием языков программирования SQL, VBA и макросов.Приводятся общие сведения о возможностях языка обмена данными между различными компьютерами и приложениями (XML). Описываются возможности использования гиперссылок, связывающих базу данных с другими программными продуктами. Объясняется, как можно работать с базой данных Access 2002 без установки ее на компьютер, используя технологию ODBC (Open Data Base Connectivity). В приложениях приводятся количественные параметры Access 2002 и связанная с этой СУБД терминология.Предлагаемая книга будет полезна специалистам, занимающимся практической разработкой банков данных и приложений на их основе, а также студентам вузов, изучающим информатику.

Павел Юрьевич Дубнов

Программирование, программы, базы данных / ОС и Сети / Книги по IT