Joins - это API асинхронных параллельных вычислений ( шаблон соединения ) от Microsoft Research для .NET Framework . Он основан на исчислении соединений и делает конструкции параллелизма языка Cω доступными в виде сборки CLI, которую может использовать любой язык, совместимый с CLI .
Обзор
Объединения можно использовать для выражения параллелизма в приложении с помощью шаблона объединений, который можно использовать как для многопоточных приложений, так и для распределенных приложений на основе событий . API-интерфейс Joins эмулирует декларативное типобезопасное выражение шаблонов синхронизации.
Библиотека Joins эмулирует асинхронные и синхронные методы. Асинхронный метод на языке Cω и Joins - это метод, который не блокирует вызывающий метод и не возвращает никакого результата, тогда как синхронный метод блокирует вызывающий метод. В API объединений синхронные и асинхронные методы реализованы как универсальные делегаты . Использование дженериков обеспечивает безопасность типов. Например, можно создать набор синхронных и асинхронных методов и использовать их для создания объекта, реализующего шаблон, как:
public class JoinDemo { public readonly Asynchronous . Канал < int > Queue ; общедоступный только для чтения Асинхронный . Канал < строка > Отправить ; public readonly Synchronous < int >. Получение канала ; private Присоединиться joinPattern = Присоединиться . Создать (); public JoinDemo () { joinPattern . Initialize ( вне очереди ); joinPattern . Initialize ( из Send ); joinPattern . Initialize ( из Восстановите ); } }
Когда вызываются асинхронные методы, параметры помещаются в канал, который представляет собой очередь, управляемую средой выполнения Joins. Метод может дополнительно запустить новый поток для обработки параметров в фоновом режиме и возврата результатов. Когда вызывается соответствующий синхронный метод, параметр возвращается для дальнейшей обработки. Если при вызове синхронного метода в очереди нет параметра, вызывающий останавливается. Расписание выполнения Joins, параметр которого возвращается в зависимости от того, готов ли он.
Шаблон синхронизации методов определяется шаблонами соединений , которые описывают, что происходит при вызове набора каналов. Например, то, что происходит при одновременном вызове Send и Retrieve , может отличаться от Send и Queue .
public void SetPatterns () { присоединиться . Когда ( Отправить ). И ( Получить ). Сделайте ( s => s ); присоединиться . Когда ( Очередь ). И ( Получить ). Сделать ( n => n . ToString ()); присоединиться . Когда ( Отправить ). И ( Очередь ). И ( Получить ). Сделайте ( s => { Отправить ( s ); return Retrieve (); }); }