我一直说你见识少你就是不信。
我说了很多遍了,有自动在线程间调度协程的也有不自动调度的。我前面说了 nodejs, python 因为线程比较烂,整个程序就跑一个线程,所以根本不存在你说的那个问题——或者说存在问题,但解决不了,语言以及运行库两手一摊,“我搞不定不关我事”。解决不了也是一种解决方案啊,类似于未定义行为,程序员自己要考虑好。
而 go, java project loom,还有 c# (?) 都是自动调度的,所以存在你说的那个问题。这些语言就像你所说的,也很难解决问题。所以才会出现你说的什么 hang,难以支持 GUI 等等。你了解的只有这一类的协程语言。
c++ 比较牛逼,根据标准两种方案都能做。但据我所知,常用的又都是第一种方案。
这两个方案各有优劣,以上举的例子是三比三,你非要说一个比另一个强,那我只能说你太强迫了。
【 在 leadu 的大作中提到: 】
: 我去,第一个这种简单问题都需要详细解释。我再用尽可能简单的语言重新描述一下
: 现在假设线程t执行了一个协程c1,协程c1内部有若干操作,其中有1次磁盘同步blocking写入,写入之后更新ui。很常见的场景,对吧
: 当线程t执行到第一次磁盘写入的时候,按照你之前的Jave Green thread说法,下面是编译器或运行时会隐式把这个同步写入转换成异步写入,异步写入开始之后,协程c1挂起,释放线程t。
: ...................
--
修改:hgoldfish FROM 59.60.25.*
FROM 59.60.25.*