Планировщики в Rxcpp
Я пытаюсь выяснить модель планирования в C++ версия Rx.
зная версию C#, где есть простой интерфейс с одним методом расписания; версия c++ кажется довольно сложной, с такими вещами, как планировщик, рабочий и координация.
одна большая недостающая часть для меня-это реализация планировщика пула потоков, она существует с каким-то другим именем? Как бы я реализовал его сам? Должен ли я написать это выше? PPL (Windows)? Если мне нужен сериализованный (актерский) наблюдатель над ним, что я должен использовать? Подглядывать!--9-->здесь и здесь может показать, что это не тривиальная задача.
Это действительно поможет получить какой-то обзор по этому вопросу, так как официальный документация генерируется автоматически и все еще очень разрежена.
1 ответов
да, созданные документы являются новыми, и планирование еще не задокументировано.
планировщик в rxcpp v2 основан на планировщике и рабочих конструкциях, которые использует RxJava (участвовал Эрик Мейер) Документы для RxJava будут иметь объяснение для планировщика и рабочего. rxcpp добавляет schedulable, координацию и координатора.
scheduler
владеет временной шкалой, которая подвергается now()
метод. scheduler
также фабрика для worker
s в этой временной шкале. поскольку планировщик владеет временной шкалой можно построить планировщики, которые путешествуют во времени. виртуальный планировщик-это база для планировщика тестов, который использует это для выполнения многосекундных тестов в ms.
worker
владеет очередью ожидающих schedulable
s для временной шкалы и имеет срок службы. когда время для schedulable
достигает schedulable
запускается. Очередь поддерживает порядок вставки так, чтобы при n schedulable
s имеют то же целевое время, когда они запускаются в том порядке, в котором они были вставлены в очередь. The worker
гарантирует, что каждый schedulable
завершается до следующего это. когда worker
'ы жизни отписался все в ожидании schedulable
s отбрасываются.
schedulable
владеет функцией и имеет рабочий и всю жизнь. когда schedulable
срок службы отписан schedulable
функция не будет вызываться. the schedulable
передается функции и позволяет функции перепланировать себя или запланировать что-то еще на том же работнике.
в новыми концепциями являются координация и координация. Я добавил их, чтобы упростить реализации операторов и ввести плату за использование в реализациях операторов. В частности, в Rx.NET и RxJava, операторы используют атомарные операции и примитивы синхронизации для координации сообщений из нескольких потоков, даже если все потоки находятся в одном потоке (например, события пользовательского интерфейса). The identity_. . .
координации в rxcpp используются по умолчанию и не имеют накладных расходов. The syncronize_. . .
и observe_on_. . .
гомогенизируют использовать мьютекс и очередь-на-работника соответственно, чтобы безопасно чередовать несколько потоков.
coordination
завод для coordinator
s и имеет scheduler
.
coordinator
есть worker
, и фабрика для координированного observable
s,subscriber
s и 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 РЕПО или конкретной платформы РЕПО.
вклады, мнения и идеи приветствуются!