我帮你搜到源代码了好吧
https://github.com/Microsoft/referencesource/blob/master/mscorlib/system/threading/Tasks/Task.cs函数式语言社区出的东西,直接把协程first class化了,whenany内部就是个continuewith的事,挂个钩子或callback能有几行代码。
数据结构水平够的话,会知道所有可能冲突东西并不一定需要线程间通信
二代协程和一代的区别在于编程时候是否以类似同步方式开发的,能否降低开发人员心智负担。
准确的说是Join calculus。并行计算和有没有stack,这分明是两码事。
c#的状态取决于运行时逻辑,有时候有stack有时候是闭包,别信网上那些小白文
Wikipedia上Join calculus有些语言的实现,我看着估计是stackful的
stackless 和 stackful 似乎是python社区喜欢这么提。从逻辑上能推出来,要是一码事的话,以python社区有些人附图那个样子,能把async/await加入python?
感觉你现在在各个版面通过喷协程在学习协程,那至少给你的关键词Join calculus你研究一下嘛。一看你回复就知道没有看
【 在 hgoldfish 的大作中提到: 】
: 在 python 里面引用 gevent 也是一行解决我说的那个需求。但不代表内部不需要代码实现。哪有一个协程库解决这种需求要写 300 行代码,必然根据语言特点包装出一个一两行的工具函数出来。我说 300 行不是对你这种协程的使用者说的,我和你讨论的根本不是一回事。
: 而协程用不用锁,要看语言的协程是怎么实现的。如果两个协程被调度到不同的线程,要通讯,你说不需要弄个内核锁是不可能的,这是操作系统这门课没及格的水平。至于锁在哪里,你就需要再深入地看 dotnot 源代码了。
: 还有这个第二代协程什么的,stackless 和 stackful 协程,wikipedia 上面早就说清楚了。你别自己发明名词了。
: ...................
--
FROM 20.205.37.*