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