Планировщики в Rxcpp

Я пытаюсь выяснить модель планирования в C ++ версия Rx.

Зная версию C #, где есть простой интерфейс с одним методом Schedule; Версия C ++ кажется довольно сложной, с такими вещами, как планировщик, работник и координация.

Один из основных недостатков для меня — это реализация планировщика пула потоков, существует ли он с другим именем? Как бы я реализовал это сам? Должен ли я написать это выше PPL (Windows)? Что мне нужно использовать, если над ним нужен сериализованный (как актер) наблюдатель? Заглянув Вот а также Вот Можно показать, что это не тривиальная задача.

Это действительно помогло бы получить некоторый обзор предмета, так как официальный документация генерируется автоматически и все еще очень скудна.

9

Решение

Да, сгенерированные документы являются новыми, а планирование еще не задокументировано.

Планировщик в rxcpp v2 основан на планировщике и рабочих конструкциях, которые использует RxJava (участвовал Эрик Мейер)
Документы для RxJava будут содержать пояснения для планировщика и работника. rxcpp добавляет планируемость, координацию и координатор.

scheduler владеет временной шкалой, которая раскрывается now() метод. scheduler также фабрика для workerв этот срок. Поскольку планировщик владеет временной шкалой, можно создавать планировщики, которые перемещаются во времени. Виртуальный планировщик является базой для планировщика тестов, который использует его для завершения мультисекундных тестов за мс.

worker владеет очередью ожидания schedulables для временной шкалы и имеет срок службы. когда время для schedulable достигнуто schedulable это запустить. Очередь поддерживает порядок вставки, так что когда N schedulableу них одинаковое целевое время, когда они выполняются в том порядке, в котором они были вставлены в очередь. worker гарантирует, что каждый schedulable завершается до следующего schedulable запущен когда workerОтписано все в ожидании schedulableс отбрасываются.

schedulable владеет функцией и имеет работника и всю жизнь. когда schedulableотписался schedulable функция не будет вызвана. schedulable передается в функцию и позволяет функции перепланировать себя или запланировать что-то еще на том же рабочем месте.

Новые понятия — координация и координатор. Я добавил их, чтобы упростить реализацию операторов и ввести плату за использование в реализациях операторов. В частности, в Rx.NET и RxJava операторы используют атомарные операции и примитивы синхронизации для координации сообщений из нескольких потоков, даже когда все потоки находятся в одном потоке (например, события пользовательского интерфейса). identity_. . . координаты в rxcpp используются по умолчанию и не требуют дополнительных затрат. syncronize_. . . а также observe_on_. . . Координаты используют mutex и queue-on-a-worker соответственно для безопасного чередования нескольких потоков.

coordination это фабрика для coordinatorс и имеет scheduler,

coordinator имеет workerи является фабрикой для скоординированных observables, subscriberс и schedulable функции.

Все операторы, которые принимают несколько потоков или совершают сделки вовремя (даже подписываться и наблюдать), принимают параметр координации, а не планировщик.

Вот некоторые поставляемые функции, которые будут производить координацию с использованием определенного планировщика.

  • identity_immediate ()
  • identity_current_thread ()
  • identity_same_worker (работник w)
  • serialize_event_loop ()
  • serialize_new_thread ()
  • serialize_same_worker (работник w)
  • observe_on_event_loop ()
  • observe_on_new_thread ()

Планировщика пула потоков пока нет. Планировщик пула потоков требует зависимости от реализации пула потоков, так как я не хочу писать пул потоков. Мой план состоит в том, чтобы создать планировщик для пула потоков Windows, пула потоков Apple и пула исполнителей asio. Один вопрос, на который нужно ответить, — должны ли эти специфичные для платформы конструкции находиться в репозитории rxcpp или иметь репозитории для конкретной платформы.

Вклад, мнения и идеи приветствуются!

8

Другие решения


По вопросам рекламы [email protected]