返回信息流请教一个问题,协程到底怎么理解?性能比线程优化在哪?学操作系统的时候有个概念用户级线程和内核级线程,协程就是这里说的用户级线程吗?
看了一些博客,说协程就是用户级线程,用户级线程的切换不涉及内核态只在用户态发生。但这没有解决我的疑惑,为什么在用户态切换就比在内核态开销小?另外,还有博客说协程只切换cpu上下文不涉及栈的保存更不能理解,请懂的同学帮忙解答一下,感谢!
这是一条镜像帖。来源:北邮人论坛 / java / #66244同步于 2022/2/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Java机器人发帖
关于协程的理解
mozhu123
2022/2/23镜像同步12 回复
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
只在用户态切换就是你程序自己的切换,实际上用的都是一个线程,这个线程一下子在吃青菜,一下子又去吃猪肉。线程的切换涉及到了内核态,内核态的操作是需要系统调用的,系统调用开销当然会大一些,还得保存上下文
我认为协程有几个特点吧。(1)协程之间的切换只发生在用户态,相当于分时服用线程,也有资料称其为纤程或用户态线程。
(2)协程切换仍需要进行上下文的保存与切换,只是相对于线程而言因为有部分是复用的,因此保存的开销相对于线程而言更小。
(3)协程开销小的另一个提现就是他只涉及用户态的操作,不需要从用户态转向内核态,然后由操作系统切换线程,再转回用户态的一系列操作,因此时间也更快。
但协程也有不好的地方,编程复杂度陡增,除非语言原生支持,否则需要自己来做异步编程,需要转换以往对线程的同步加锁的思想。
以上就是我的几点理解,如果有不对的地方还请指正[em1]
【 在 richeal 的大作中提到: 】
: 只在用户态切换就是你程序自己的切换,实际上用的都是一个线程,这个线程一下子在吃青菜,一下子又去吃猪肉。线程的切换涉及到了内核态,内核态的操作是需要系统调用的,系统调用开销当然会大一些,还得保存上下文