- Concurrency and Coordination Runtime
-
Concurrency and Coordination Runtime (CCR) — библиотека для работы с параллельными и асинхронными потоками данных, базирующаяся на .NET Framework от Microsoft, поставляемая в комплекте с Microsoft Robotics Developer Studio (MS RDS). Несмотря на то что данная библиотека поставляется с MS RDS, сфера её применения не ограничена лишь моделированием поведения робототехники, а также может применяться для улучшения асинхронности в любых приложениях.
Программная логика робота — в отличие от традиционных приложений — должна взаимодействовать с непредсказуемой окружающей средой и правильно реагировать на информацию, поступающую одновременно от множества датчиков. По многим причинам имеет смысл существенную часть логики перенести на множество взаимодействующих друг с другом компьютеров, которые физически могут находиться как на роботе, так и вне его. По этому требуется подход, который одинаково хорошо подходит как для параллельных, так и для распределенных приложений. Библиотека Concurrency & Coordination Runtime и была специально разработана для того, чтобы упростить создание кода для параллельного исполнения и хорошего масштабирования на современных многоядерных процессорах.
Для ответа на вопрос «зачем нужна CCR» вспомним определение понятия «приложение» в контексте Robotics Studio: это композиция слабосвязанных параллельно выполняющихся компонентов. Этот подход можно было бы реализовать с помощью существующих примитивов многопоточного программирования. Однако процесс написания многопоточных приложений — далеко не простая задача, и она становится все сложнее по мере роста числа одновременно выполняемых потоков.
При использовании CCR не требуется вручную управлять потоками, блокировками, семафорами, т. е. всеми стандартными примитивами синхронизации потоков. CCR — это не просто набор утилит, это совершенно другой подход к написанию кода. Он основан на очередях сообщений и наборе зависящих от данных примитивов синхронизации. Потоки полностью скрыты от программиста, и Runtime — в зависимости от данных и от того, где они нужны, — решает, какой код и где будет исполняться. Поскольку синхронизация идет по данным, то запрещается — использовать общую память т.к., это может полностью нарушить схему работы кода.
Библиотека CCR упрощает написание программ, которые работают со многими параллельными и асинхронными потоками данных. Примерами потоков данных могут служить информация с датчиков, ее обработка и управление движением в роботах. [1]
CCR-библиотека содержит класс
Dispatcher
, реализующий набор для работы с потоками, с фиксированным числом потоков, все из которых могут выполняться одновременно. Каждый диспетчер содержит очередь (называемуюDispatcherQueue
) делегатов, представляющие собой точку входа в процедуру (называемая еще work item или операцией), которая может быть выполнена асинхронно. Операции передаются потокам для выполнения. Объект-диспетчер также содержит обобщённыйPort
, представляющий собой очередь, в которую помещается результат асинхронного выполнения операции. Каждая операция может быть ассоциирована с объектомReceiverTask
, который использует результат для дальнейшей обработки.Arbiter
управляет полученными задачамиReceiverTask
и вызывает их когда результат, который они ожидают, готов и помещен в очередьPort
.В октябре 2008 года библиотека CCR стала доступна в виде отдельного продукта вместе с средством Decentralized Software Services под названием CCR and DSS Toolkit 2008. [2])
См. также
- Parallel Extensions
- Joins
Ссылки
Дополнительные источники
- CCR: MSDN Magazine
- CCR: Интервью от Channel9
- Домашняя страница CCR and DSS Toolkit 2008
- MSDN-документация по Concurrency and Coordination Runtime
Категории:- .NET Framework
- Библиотеки параллельного программирования
Wikimedia Foundation. 2010.