对。java project loom 和 python gevent 等 green thread 或者你所谓的第一代协程语言的与 async/await 的唯一区别就是要不要使用 async/await 关键字。内部实现原理以及各种工具类并没有任何区别。强调一遍,没有任何区别。
go 和 java 的好处是从语言底层,标准库里面把所有阻塞的调用都实现为 async 版本。c#, c++ 和 python 则会分别有 sync 和 async 两个版本 read()/write() 供程序员选择,所以前两个语言不需要关键字,后三个语言需要关键字 await 来区分 sync/async 调用。
最傻的是 javascript,它的 IO 必然都是 async 的,天然地可以采用 go/java 的办法,只要碰到 read/write 都自动地调用 async 版本——它也没有 sync 的 io. 但是 javascript 的设计者很蠢,只知道从 python 和 c# 抄语言特性,没想明白。
【 在 leadu 的大作中提到: 】
: 是不是可以认为,在GreenThread context自动调用async版本的Write?
--
修改:hgoldfish FROM 117.24.94.*
FROM 117.24.94.*