Курс лекций для студентов специальности i-31 03 04 Информатика всех форм обучения Минск 2010


БИБЛИОТЕКА ПАРАЛЛЕЛЬНЫХ РАСШИРЕНИЙ



страница25/29
Дата09.08.2019
Размер0.64 Mb.
#126834
ТипКурс лекций
1   ...   21   22   23   24   25   26   27   28   29

2.29. БИБЛИОТЕКА ПАРАЛЛЕЛЬНЫХ РАСШИРЕНИЙ


Библиотека параллельных расширений (Parallel Extensions) разработана Microsoft для создания многопоточных приложений. Библиотека позволяет автоматически масштабировать выполняемые задачи, подстраиваясь под фактическое число процессорных ядер. Кроме этого, предлагается упрощенный программный интерфейс (новый набор классов) для конструирования многопоточных приложений. Parallel Extensions является частью платформы .NET 4.0.

Parallel Extensions обеспечивает три уровня организации параллелизма:



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

  • Параллелизм при императивной обработке данных. Библиотека содержит параллельные реализации основных итеративных операторов, таких как циклы for и foreach. При этом выполнение автоматически распределяется на все доступные ядра/процессоры вычислительной системы.

  • Параллелизм при декларативной обработке данных  реализуется при помощи параллельного интегрированного языка запросов (PLINQ). PLINQ выполняет запросы параллельно, обеспечивая масштабируемость и загрузку доступных ядер и процессоров.

Параллелизм на уровне задач


Параллелизм на уровне задач – базовый уровень библиотеки Parallel Extensions. Задача – это сущность, которая в целом подобна потоку. Основное отличие заключается в том, что исполнением задач управляет специальный планировщик, учитывающий фактическое число процессорных ядер. Это делает использованием задач сходным с работой пула потоков1.

Для представления задач используются классы Task и Task, размещённые в пространстве имён System.Threading.Tasks. Табл. 20 содержит описание элементов класса Task.

Таблица 20

Элементы класса Task



Имя элемента

Описание

AsyncState

Объект, заданный при создании задачи как аргумент Action

ContinueWith(),

ContinueWith()



Используются для указания метода, выполняемого после завершения текущей задачи

CreationOptions

Опции, указанные при создании задачи (тип TaskCreationOptions)

CurrentId

Статическое свойство типа int?, которое возвращает целочисленный идентификатор текущей задачи

Dispose()

Освобождение ресурсов, связанных с задачей

Exception

Возвращает объект типа AggregateException, который соответствует исключению, прервавшему выполнение задачи

Factory

Доступ к фабрике, содержащей методы создания Task и Task

Id

Целочисленный идентификатор задачи

IsCanceled

Булево свойство, указывающее, была ли задача отменена

IsCompleted

Свойство равно true, если выполнение задачи успешно завершилось

IsFaulted

Свойство равно true, если задача сгенерировала исключение

RunSynchronously()

Запуск задачи синхронно

Start()

Запуск задачи асинхронно

Status

Возвращает текущий статус задачи (объект типа TaskStatus)

Wait()

Приостанавливает текущий поток до завершения задачи

WaitAll()

Статический метод; приостанавливает текущий поток до завершения всех указанных задач

WaitAny()

Статический метод; приостанавливает текущий поток до завершения любой из указанных задач

Для создания задачи используется один из перегруженных конструкторов класса Task. При этом указывается аргумент типа Action  метод, выполняемый в задаче. Если необходим метод с параметром, используется аргумент Action и дополнительный аргумент типа object.

Action work = () =>

{

Thread.Sleep(2000);



Console.WriteLine("Done");

};
Action work2 = obj =>

{

Thread.Sleep(1000);



Console.WriteLine(obj.ToString());

};
var t1 = new Task(work);

var t2 = new Task(work2, 25);

Конструкторы Task принимают опциональные аргументы типа CancellationToken и TaskCreationOptions. Перечисление TaskCreationOptions задаёт вид задачи (например, LongRunning – долгая задача). Структура CancellationToken (токен отмены) применяется для прерывания задачи.

var t1 = new Task(work, TaskCreationOptions.LongRunning);

Созданная задача ставится в очередь планировщика для запуска при помощи методов Start() или RunSynchronously(). Второй метод запускает задачу в текущем потоке. Оба метода могут принимать аргумент типа TaskScheduler (пользовательский планировщик задач).

// используем задачи t1 и t2, объявленные выше

t1.Start(); // асинхронный запуск

t2.RunSynchronously(); // синхронный запуск

Console.WriteLine("Task started"); // напечатано через 1 сек.

Метод ContinueWith() позволяет создать цепочку задач, запуская указанный метод после завершения текущей задачи (текущая задача передаётся методу в качестве параметра). ContinueWith() можно вызвать как до, так и после старта задачи.

t1.ContinueWith(task => Console.WriteLine("After task " + task.Id));

Методы Wait(), WaitAll() и WaitAny() останавливают основной поток до завершения задачи (или задач). Перегруженные версии методов позволяют задать период ожидания завершения и токен отмены.

t1.Wait(1000);

Task.WaitAll(t1, t2);

Класс Task наследуется от Task и описывает задачу, возвращающую значение типа T. Дополнительно к элементам базового класса, Task объявляет свойство Result для хранения вычисленного значения. Конструкторы класса Task принимают аргументы типа Func и Func (опционально  аргументы типа CancellationToken и TaskCreationOptions).

Func func = () =>

{

Thread.Sleep(2000);



return 100;

};

var task = new Task(func);



Console.WriteLine(task.Status); // "Created"

task.Start();

Console.WriteLine(task.Status); // "WaitingToRun"

task.Wait();

Console.WriteLine(task.Result); // выведет "100"

Класс TaskFactory содержит набор методов, соответствующих некоторым сценариям использования задач  StartNew(), FromAsync(), ContinueWhenAll(), ContinueWhenAny(). Экземпляр TaskFactory доступен через статическое свойство Task.Factory.

Task.Factory.StartNew(() =>

{

Thread.Sleep(2000);



Console.WriteLine("Done");

});


Каталог: images
images -> В списке студентов (или магистрантов)
images -> Н. И. Сулейманов Комплект контрольно-оценочных средств для оценки результатов освоения профессионального модуля разработан на основе Федерального государственного образовательного стандарта среднего профессионального
images -> По направлению подготовки
images -> Добавить гаджеты. Добавление гаджетов
images -> Техническое задание № apnip/C. 2/CS/Ind/01 Международный консультант по улучшенной производительности орошаемого земледелия
images -> Комплект контрольно-оценочных средств по профессиональному модулю пм. 01 Техническое обслуживание и ремонт автотранспорта


Поделитесь с Вашими друзьями:
1   ...   21   22   23   24   25   26   27   28   29




База данных защищена авторским правом ©vossta.ru 2022
обратиться к администрации

    Главная страница