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].

См. также

Ссылки

Дополнительные источники

This article is issued from Wikipedia. The text is licensed under Creative Commons - Attribution - Sharealike. Additional terms may apply for the media files.