Rxcpp中的调度器 我想在RX. C++中找到调度模型。

Rxcpp中的调度器 我想在RX. C++中找到调度模型。,c++,threadpool,system.reactive,ppl,rxcpp,C++,Threadpool,System.reactive,Ppl,Rxcpp,了解C#版本,其中有一个简单的接口和一个调度方法;C++版本看起来相当复杂,有调度程序、工作程序和协调等东西。p> 我缺少的一个主要部分是线程池调度器的实现,它是否存在其他名称?我将如何自己实现它?我应该把它写在(窗户)上面吗?如果我需要一个序列化的(类似于演员的)观察者,我应该使用什么?偷看并能表明这不是一件小事 这将真正有助于获得关于该主题的某种概述,因为文档是自动生成的,而且仍然非常稀疏 是的,生成的文档是新的,并且计划尚未记录 RxCPPv2中的调度器基于RxJava使用的调度器和工作器

了解C#版本,其中有一个简单的接口和一个调度方法;C++版本看起来相当复杂,有调度程序、工作程序和协调等东西。p> 我缺少的一个主要部分是线程池调度器的实现,它是否存在其他名称?我将如何自己实现它?我应该把它写在(窗户)上面吗?如果我需要一个序列化的(类似于演员的)观察者,我应该使用什么?偷看并能表明这不是一件小事


这将真正有助于获得关于该主题的某种概述,因为文档是自动生成的,而且仍然非常稀疏

是的,生成的文档是新的,并且计划尚未记录

RxCPPv2中的调度器基于RxJava使用的调度器和工作器构造(EricMeijer参与) RxJava的文档将对调度程序和工作程序进行解释。rxcpp增加了可调度性、协调性和协调性

scheduler
拥有由
now()
方法公开的时间线<代码>调度程序也是该时间线中工人的工厂。由于调度器拥有一个时间轴,因此可以构建时间旅行的调度器。虚拟调度器是测试调度器的基础,它使用虚拟调度器在毫秒内完成多秒钟测试

worker
拥有一个时间线的挂起
可调度
s队列,并且具有生存期。当达到
可调度
的时间时,运行
可调度
。队列维护插入顺序,以便当N
schedulable
s具有相同的目标时间时,它们将按照插入队列的顺序运行。
worker
保证每个
schedulable
在下一个
schedulable
启动之前完成。当
工作者的生命周期取消订阅时,所有挂起的
可调度的
将被丢弃

schedulable
拥有一个函数,有一个工作进程和一个生命周期。当取消订阅
可调度
的生存期时,将不会调用
可调度
函数。
可调度的
被传递给函数,并允许函数在同一个工作进程上重新调度自身或调度其他内容

新概念是协调和协调。我添加这些是为了简化运营商实现,并在运营商实现中引入按使用付费。具体来说,在Rx.NET和RxJava中,操作员使用原子操作和同步原语来协调来自多个流的消息,即使所有流都在同一线程上(如UI事件)。
identity\uu协调默认使用,没有开销。
syncronize\uu和<代码>观察\u上的\u协调分别使用互斥和queue-to-a-worker来安全地交织多个流

coordination
协调器的工厂,并具有
调度程序

协调器
有一个
工人
,是协调
可观察
s、
订户
s和
可调度
功能的工厂

所有接收多个流或及时处理(甚至subscribe_on和observe_on)的操作员都采用协调参数,而不是调度程序

下面是一些提供的函数,它们将使用特定的调度程序生成协调

  • 恒等式
  • 标识\当前\线程()
  • 同一工人身份(工人w)
  • 序列化事件循环()
  • 序列化新线程()
  • 序列化\u相同\u工作者(工作者w)
  • 观察事件上的事件循环()
  • 观察新螺纹上的螺纹()
还没有线程池计划程序。线程池调度器需要依赖于线程池实现,因为我不希望编写线程池。我的计划是为windows线程池、apple线程池和boost asio执行器池创建一个调度程序。。需要回答的一个问题是,这些特定于平台的构造是应该存在于rxcpp回购协议中,还是应该具有特定于平台的回购协议


欢迎您的贡献、意见和想法

谢谢你的评论,我可以把一个简单的调度器放在一起(功能集非常有限),但现在已经足够满足我的基本需求了。我已经遵循java中的调度器/工作IMPL教程(4部分):然后把我的知识映射到C++世界——它工作了,所以我推荐这个方法,然后再做更完整的文档。我很想看:)