再换种说法,协程概念实际分两代:
1.一代是传统用户态线程,有很多用类似于goto的方法实现,这个是你在讨论的,c和go基本上是用的这种,得有二三十年的历史了
2.二代是指c#十多年前发明的async/await,后续js/c++/rust等都在抄袭。这个是我和老鱼在讨论的。
c#你care不care的,至少大家讨论得在同一个范围内才有意义
【 在 lvsoft 的大作中提到: 】
: 说协程是goto的语法糖只是一种比较土鳖的说法。比较雅一点的说法是continuation,只不过这么说没几个人听的懂就是了。
: 进程线程协程本身只是一个用来定义上下文实现资源隔离的概念。调度是在实际环境中为了解决资源不足和冲突才引入的,额外的,另一个维度的东西。而且现在来说进程线程之类的概念都太老了,满足不了实际需要了,现在大家都玩sandbox+bare metal,有人连os kernel,ring0都想消灭掉了。实现层面早就玩出花了,who care c#是不是在什么犄角旮旯的地方做的比c、go更好啊,这些都是细枝末节的无聊话题,都不在一个维度上。
: 协程这东西,最有价值的地方是内核无感。这点与线程相反,线程是用户态的程序无感。所以协程的价值就是当成高级goto来用,给你一套机制让你可以方便的安排好context switch的位置、时间、节奏。因为你都安排好了,自然不需要竞争,不产生调度负担,所以才能提高规模。
: ...................
--
FROM 123.116.196.*