Open bennyhuo opened 1 year ago
目前能找到的写C++协程调度最好的教程,学习了,感谢! 我在想调度器是否也可以做成轮询的模式,向所有的协程查询是否可以恢复,Awaitor生成可查询接口注册到调度器中。这样延迟操作实现很简单,而且可以和UI调度一起工作于同一线程。
轮询模式类似于 select 吗,这样需要让调度器知道所有正在运行的协程,维护一个协程句柄的清单。其实直接做成消息队列就行,协程异步逻辑处理完之后向调度器发送消息,调度器通过读消息队列来决定恢复执行哪个协程。有点儿像 epoll。
@bennyhuo 轮询模式类似于 select 吗,这样需要让调度器知道所有正在运行的协程,维护一个协程句柄的清单。其实直接做成消息队列就行,协程异步逻辑处理完之后向调度器发送消息,调度器通过读消息队列来决定恢复执行哪个协程。有点儿像 epoll。
差不多类似select(但不阻塞)。因为我遇到的不少异步操作是不支持回调的,而是通过修改标记来得知是否完成。一个方法是建一个线程负责检测异步完成,然后由这个线程通知调度器“恢复协程”。我在想是否可以省掉这个线程,把原调度器里while循环体单独提取出来,假设命名为dispatch(),这里查询所有记录的协程(且包含一个查询functor),如果查询后得知完成,则恢复之。这个dispatch()可以放到UI空闲事件中做检测,也可以用一个线程循环检测(但要考虑交出CPU时间)。只是一个想法,准备实施看看。
应该是可以的
@bennyhuo 应该是可以的
嗯,可行,初步实现了一个:https://github.com/waiting4love/MyCoroLib。多谢指导。
https://www.bennyhuo.com/2022/03/20/cpp-coroutines-06-sleep/
如果你想要等待 100ms,你会怎么做?sleep_for(100ms) 吗?