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

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

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

одна большая недостающая часть для меня-это реализация планировщика пула потоков, она существует с каким-то другим именем? Как бы я реализовал его сам? Должен ли я написать это выше? PPL (Windows)? Если мне нужен сериализованный (актерский) наблюдатель над ним, что я должен использовать? Подглядывать!--9-->здесь и здесь может показать, что это не тривиальная задача.

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

1 ответов


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

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

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

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

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

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

coordination завод для coordinators и имеет scheduler.

coordinator есть worker, и фабрика для координированного observables,subscribers и schedulable функции.

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

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

  • 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 и пула исполнителей boost asio.. На один вопрос ответь, были ли эти конкретные платформы конструкты должны жить в rxcpp РЕПО или конкретной платформы РЕПО.

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