- 主题:c++有栈协程一般主线程作为worker么?
也就是主线程是否用来执行协程
--
FROM 61.48.14.*
单是协程只能实现 iterator 那样的 yield,用于循环迭代。比如拿协程来实现编程语言的 lexer 特别方便。
如果想拿协程多干点事,就必须有个事件循环协程。事件循环协程根据定时器以及 io 事件来切换协程。普通协程干完活就 yield 到这个事件循环协程。
主线程的 main() 是否转换成事件循环协程没有规定。看使用时候是否方便。比如有些人想直接在 main() 里面完成 http 请求。那就得在后台启动事件循环协程。而图形界面的话,估计很多人会直接在 main() 里面跑事件循环协程。
【 在 stub 的大作中提到: 】
: 也就是主线程是否用来执行协程
--
FROM 59.61.198.*
【 在 stub 的大作中提到: 】
: 也就是主线程是否用来执行协程
1楼解释的很清楚。
我的做法,主线程只负责产生工作线程和管理全局资源,不干具体事。
全部工作线程都在事件管理器循环,我用的是epoll,没事都在epoll_wait。
线程收到一个fd被激活的,才会resume对应的协程。
每个连接一个协程,每个核一个线程。线程收到一个fd就resume一个协程,协程需要IO时,就把fd交给epoll,自己yield。
--
FROM 221.221.51.*