пятница, 10 июля 2009 г.

Parallel Extensions для .NET. Ссылки

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



Parallel Extensions для .net 3.5
http://habrahabr.ru/blogs/net/45732/

На мой взгляд самая удачная статья для ознакомления с библиотекой Parallel Extensions. Описывается структура библиотеки и введение в Task Parallel Library.



Оптимизация управляемого кода для многоядерных компьютеров
http://msdn.microsoft.com/ru-ru/magazine/cc163340.aspx

Достаточно объемная статья. Интересен пример, в котором показывается три варианта реализации алгоритма: однопоточный, многопоточный с использованием стандартного API в .NET, многопоточный с использованием Parallel Extensions.
Несколько полнее описан Task Parallel Library. Описываются задания (Task) и диспетчер заданий (TaskManager), правда с момента написания статьи произошли небольшие изменения в API.



Блог команды, которая занимается разработкой Parallel Extensions
http://blogs.msdn.com/pfxteam/default.aspx

В блоге доступна обширная информация по API библиотеки и описаны типовые сценарии.



Multiple thread-local state elements in a loop
http://blogs.msdn.com/pfxteam/archive/2008/05/28/8556655.aspx

Описывается работа с типом ParallelState - контейнер для объектов которые "зашарены" на поток. В принципе API относительно удобный. Я использовал этот класс на проекте, но потом от него отказался. Перешел на кеширование объектов на уровне потока, которое предоставляет IoC контейнер (в моем случае это Castle.Windsor). Объекты запрашиваются у ServiceLocator'а, который я реализовал как фасад к Castle.Windsor.



Coordination Data Structures Overview
http://blogs.msdn.com/pfxteam/archive/2008/06/18/8620615.aspx

Coordination Data Structures – LazyInit
http://blogs.msdn.com/pedram/archive/2008/06/02/coordination-data-structures-lazyinit-t.aspx

По двум ссылкам выше, описываются структуры, которые можно использовать в многопоточных сценариях. Как правило эти структуры достаточно слабо описывают в статьях, которые посвящены библиотеке Parallel Extensions.



Waltzing Through the Parallel Extensions June CTP: Synchronization Primitives
http://blogs.microsoft.co.il/blogs/sasha/archive/2008/06/11/waltzing-through-the-parallel-extensions-june-ctp-synchronization-primitives.aspx

Есть элементы синхронизации в .NET, а есть и в Parallel Extensions. :)
Да, я знаю что это такое и зачем это нужно, но мне лень это описывать :)



TaskManager – The Range Rover of the .Net 4 Parallel Extensions
http://www.lovethedot.net/2009/03/taskmanager-range-rover-of-net-4.html

Очень хорошо описывается интерфейс класса TaskManager. Этот класс нужно использовать, если вам необходимо явно указать сколько процессоров/потоков вы готовы отдать планировщику. По-умолчанию планировщик использует все доступные ресурсы CPU.