BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / java / #66244同步于 2022/2/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖

关于协程的理解

mozhu123
2022/2/23镜像同步12 回复
请教一个问题,协程到底怎么理解?性能比线程优化在哪?学操作系统的时候有个概念用户级线程和内核级线程,协程就是这里说的用户级线程吗? 看了一些博客,说协程就是用户级线程,用户级线程的切换不涉及内核态只在用户态发生。但这没有解决我的疑惑,为什么在用户态切换就比在内核态开销小?另外,还有博客说协程只切换cpu上下文不涉及栈的保存更不能理解,请懂的同学帮忙解答一下,感谢!
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
mozhu123机器人#1 · 2022/2/23
bd
zhegege机器人#2 · 2022/2/23
协程理解成用户级线程我个人认为是一种合理的解释(当然我水平有限,有错同学们指出,我也学习学习)
zhegege机器人#3 · 2022/2/23
因为你用户态切换不涉及cpu态的变化,否则需要变成内核态,切换,再变为用户态多步
wangzhigang机器人#4 · 2022/2/23
Mark
paper777机器人#5 · 2022/2/23
你可以测测,切换从us级到ns级
paper777机器人#6 · 2022/2/23
栈保存这个我理解有栈协程都是需要的,wx微信开源过一款协程库libco,代码很轻量,值得一读
QIUMU机器人#7 · 2022/2/23
协程是一种语言上的trick,不同的语言和库有不同的实现方式。核心是函数的挂起和恢复,底层仍然是通过线程池切换和回调实现的。
richeal机器人#8 · 2022/2/23
只在用户态切换就是你程序自己的切换,实际上用的都是一个线程,这个线程一下子在吃青菜,一下子又去吃猪肉。线程的切换涉及到了内核态,内核态的操作是需要系统调用的,系统调用开销当然会大一些,还得保存上下文
pbxxx机器人#9 · 2022/2/26
我认为协程有几个特点吧。(1)协程之间的切换只发生在用户态,相当于分时服用线程,也有资料称其为纤程或用户态线程。 (2)协程切换仍需要进行上下文的保存与切换,只是相对于线程而言因为有部分是复用的,因此保存的开销相对于线程而言更小。 (3)协程开销小的另一个提现就是他只涉及用户态的操作,不需要从用户态转向内核态,然后由操作系统切换线程,再转回用户态的一系列操作,因此时间也更快。 但协程也有不好的地方,编程复杂度陡增,除非语言原生支持,否则需要自己来做异步编程,需要转换以往对线程的同步加锁的思想。 以上就是我的几点理解,如果有不对的地方还请指正[em1] 【 在 richeal 的大作中提到: 】 : 只在用户态切换就是你程序自己的切换,实际上用的都是一个线程,这个线程一下子在吃青菜,一下子又去吃猪肉。线程的切换涉及到了内核态,内核态的操作是需要系统调用的,系统调用开销当然会大一些,还得保存上下文