啊,你又突然会啦?
前面吹go和green thread的时候,比这个语言那个语言都牛,我只能打了一大堆字反复和你解释,实际中的有很多你没有想到的问题。
现在现在你总是明白了其中一部分问题。又开始说“而 go, java project loom,还有 c# (?) 都是自动调度的”现在一看go不行了,要带上c#了,一起比烂么
可惜,c#/c++你也不会,这些问题只有go这种第一代协程中存在,别的语言都是async/await没有这个问题。
所有语言的用于异步并发,都有一样的问题,上面只是给你反复解释了几次才能让你明白一个问题,别的问题我实在懒得打太多字了。
这些问题都有不同的解法,早年大家写状态机来解决的多一些。
现在的语言对这些问题的解法,只要是采用async/await解法,就只能有一种架构实现,区别只在于那堆内部实现对象名字叫什么和特别细节的内容的不同,主体架构都是一样的,都要和c#现在的一致,谁也变不出花来
你之所以觉得c++和c#的协程部分不一样,在于这两种语言在协程方面的成熟度不一样。
是dotnet社区发明的async/await,这俩关键词在c#这边出现了20年,复杂程度是要比别的语言都高的。
你觉得c++有的那些,在c#里面一样有,c#里面task scheduler和
https://devblogs.microsoft.com/premier-developer/dissecting-the-async-methods-in-c/都有涉及,这些属于底层部分,一般用的少也就不怎么介绍
c#中这个问题是由ConfigureAwait(false)来解决的
c++协程一样有高级部分,
https://github.com/lewissbaker/cppcoro,现在状态是标准的ts,未来不知道咋样
上面说了,只要是叫async,只有一种解法,cppcoro这些就是对着c#抄的,连名字都一样
c++和c#两者的协程只是处于不同的阶段
你连协程想解决的那堆问题都不太明白就别说别的语言了,还是说说go吧
话接着说回来,你上面吹了半天的那个go的协程,除了我刚才提到的问题全都解决不了,内部到底怎么实现的?
比如socket.send,做了两个版本,一个给同步环境用一个给协程用?怎么感知的当前context?
【 在 hgoldfish 的大作中提到: 】
: 我一直说你见识少你就是不信。
: 我说了很多遍了,有自动在线程间调度协程的也有不自动调度的。我前面说了 nodejs, python 因为线程比较烂,整个程序就跑一个线程,所以根本不存在你说的那个问题——或者说存在问题,但解决不了,语言以及运行库两手一摊,“我搞不定不关我事”。解决不了也是一种解决方案啊,类似于未定义行为,程序员自己要考虑好。
: 而 go, java project loom,还有 c# (?) 都是自动调度的,所以存在你说的那个问题。这些语言就像你所说的,也很难解决问题。所以才会出现你说的什么 hang,难以支持 GUI 等等。你了解的只有这一类的协程语言。
: ...................
--
修改:leadu FROM 123.116.219.*
FROM 123.116.219.*