只有一行代码,哪来的300行代码?
协程有两代,
第一代是操作系统那帮人搞的,微软这边从win2000的fiber,到windows xp的QueueUserWorkItem
fiber只有ms sql server7中据说用过,基本没啥人用。QueueUserWorkItem用户也不多,现在都被微软扔到Threadpoollegacyapiset.h里面了
Linux这边就是golang,和QueueUserWorkItem一样的思路,加了点语法糖。Linux这边倒是有不少用go的,还有c的库用jmp模拟的
第一代协程其实意义不大,提供的性能提升非常有限,又得必须按照它的使用逻辑或pattern使用。
你上面提出的三个task随意一个返回的问题,用这一代协程确实有你说的各种问题包括同步等
第二代协程是async/await,来自于做并行计算那帮人。
正式名称叫join calculus,概念本身来自于caml社区。
作者C?edric Fournet和Georges Gonthier后来去的微软,参与的dotnet的开发。
微软把join calculus丰富之后,创立了两个关键词async/await,加入了C#和F#。
之后因为js的copy名声大振,各个语言分别往自己里面加。
c#的生态已经全部迁移到async/await了,连显示对话框都是await DisplayAlert
第二代协程是并行计算那帮人搞得,他们还能给你留什么你以为的同步问题?
上面提出的三个task随意一个返回的问题,c#就一行代码,无锁解决。
自己去看join calculus吧
【 在 hgoldfish 的大作中提到: 】
: 是啊。本来就很简单。最简单的实现只要不到三百行的代码。
: 但这就是同步模型啊。
:
※ 修改:·leadu 于 Dec 1 17:17:22 2021 修改本文·[FROM: 123.116.198.*]
※ 来源:·水木社区
http://www.mysmth.net·[FROM: 123.116.198.*]
修改:leadu FROM 123.116.198.*
FROM 123.116.198.*