老鱼你这俩个和c#相关的帖子都似是而非的,简单聊聊相关历史吧
Fiber:纤程基本没人用,而且也未必和sql server有关,那时候怕还是sql 7,sybase开发的
线程池类型的协程:xp加入了一个win32 api QueueUserWorkItem ,就是个Windows给各个语言提供的线程池,
内容和go鼓吹的协程是一样的,这也是我为什么一直觉得go差点意思的原因:windows提前10年用上的东西Linux那边当宝了?Linux那边多线程相关的东西一直比较落后
好像是windows vista开始,QueueUserWorkItem 进一步发展变出了允许多个线程池
这个逐步开始有不少使用者但还没有成气候就被async超越了
async/await类型的协程:最早是95年caml社区提出了Join Calculus的概念,
https://en.wikipedia.org/wiki/Join-calculus论文作者之一Georges Gonthier后来去微软了,当时和F#的作者一个在写c#编译器,一个在写clr
微软研究院于2003年推出了个C#的扩展Cω,
https://www.microsoft.com/en-us/research/project/comega/里面第一次提出了linq和async/await,我猜测Cω也许和Georges Gonthier有关,懒得去查证了
此时应该是async/await的第一次正式面世
https://en.wikipedia.org/wiki/Async/await 然后就是F#先正式用上了async/await,然后是C#
async/await卓有成效的降低了多线程开发的复杂度和错误发生率,极大的提高了cpu利用率,所以现在各个语言纷纷开抄
线程池类型的协程在windows这边,除了native程序还有些在用,dotnet社区已经全面淘汰了线程池类型的协程。
所以个人开发者觉得协程应该怎么样是没有用的,这都是dotnet社区选择过一遍的结果
别的语言社区也都不傻,自然是抄别的语言社区最终优胜的那个方案
【 在 hgoldfish 的大作中提到: 】
: 对比其它支持线程的编程语言,js 不支持线程,天生异步,是唯一能够实现隐式协程的编程语言,这是它得天独厚的条件。但 js 选择了盲从,错失了一个机会,真是替 js 感到可惜。
: 协程不是什么新东东。微软在 win2k 时代之前就为 windows 增加了 Fiber 系列函数,用于 ms sql 的源代码中。
: 但协程之所以一直没有普及,是因为协程是 all or nothing, go 抓住了机会,js 没抓住。
: ...................
--
FROM 123.116.203.*