Jump to content

Объединения (библиотека параллелизма)

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();
                                                });
}
[ редактировать ]


Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: cfb6ef250e8ede4229c612e42529399d__1595661900
URL1:https://arc.ask3.ru/arc/aa/cf/9d/cfb6ef250e8ede4229c612e42529399d.html
Заголовок, (Title) документа по адресу, URL1:
Joins (concurrency library) - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)