关注
之前听说C++20也引入了协程,但是不完善,估计要等到C++23。所以当时去剖析了腾讯微信开源的libco,顺便也学习一下协程的知识。
协程又称用户态的线程,是因为其之间的切换是只在用户态进行的,而不需要切换入内核态。就像一个进程有多个线程一样,一个线程也有多个协程。在libco中,一个协程只能运行在一个线程中,其和线程的关系类似于进程之于CPU。这里是跟go语言协程不同的第一个点。
第二个点就是,go语言的协程是对称式的,其协程之间的调度由调度器来resume,然后协程中断执行也会将CPU使用权yield回调度器。而libco这里则是非对称式的,其使用一个pCallStack来跟踪当前的协程调用情况,栈顶永远都是当前正在执行的协程。栈底则是主协程所在的地方,主协程也就是main函数那个协程,其在调用resume其他协程之后就进入了eventloop中负责调度其他协程。而当前的栈顶协程当执行完后,其就出栈,栈顶指针--,也就是将CPU使用权yield到它下面的那个协程。
查看原帖
1 评论
相关推荐
点赞 评论 收藏
分享
凸守早苗:耐面王
点赞 评论 收藏
分享
牛客热帖
更多
正在热议
更多
# 你的mentor是什么样的人? #
6431次浏览 55人参与
# 26届秋招公司红黑榜 #
16959次浏览 57人参与
# 平安产险科技校招 #
2496次浏览 0人参与
# 怎么给家人解释你的工作? #
3040次浏览 39人参与
# 求职低谷期你是怎么度过的 #
6703次浏览 131人参与
# 帮我看看,领导说这话什么意思? #
8708次浏览 43人参与
# 智慧芽求职进展汇总 #
29089次浏览 120人参与
# 实习必须要去大厂吗? #
147769次浏览 1548人参与
# 你觉得mentor喜欢什么样的实习生 #
12359次浏览 331人参与
# 度小满求职进展汇总 #
10759次浏览 58人参与
# 你觉得多少薪资算SSP? #
112919次浏览 415人参与
# 校招泡的最久的公司是哪家? #
6116次浏览 31人参与
# 你遇到过哪些神仙同事 #
117463次浏览 750人参与
# 没有家庭托举的我是怎么找工作的 #
14710次浏览 182人参与
# 牛客树洞,我想对你说 #
1910次浏览 36人参与
# 同bg的你秋招战况如何? #
159032次浏览 927人参与
# 从哪些方向判断这个offer值不值得去? #
7928次浏览 104人参与
# 你觉得面试是靠实力还是靠运气 #
23470次浏览 278人参与
# 职场破防瞬间 #
343508次浏览 2819人参与
# 面试紧张时你会有什么表现? #
2128次浏览 23人参与
# 职场新人体验 #
100021次浏览 660人参与
# 扒一扒那些奇葩实习经历 #
118741次浏览 1065人参与