async/await 和 golang 协程,好像不在一个易用性程度上。

2018-01-17 17:15:47 +08:00
 owenliang

最近在看 async/await 模型的协程,貌似 async 必须 await..

Golang 首先不用 await 一个 courotine,其次可以 select+channel...

你们可以教教我怎么 async+await 实现并发协程么?

9426 次点击
所在节点    Python
25 条回复
wwqgtxx
2018-01-17 21:02:11 +08:00
说到底 py3 的 async/await 本质上只是生成器和迭代器的语法糖,而 golang 的 go func 是语言级别的并发模型,两者自然没有可比性
python 标准库中大部分的 api 都是阻塞式的,不可能为了支持协程而大范围修改系统库(为了兼容性),虽然 gevent 的 monkey patch 可以实现把整个系统的线程都改成协程操作的,不过如果调用了 c 库就会阻塞整个程序(需要自己对 gevent.ThreadPool 进行封装调用)
而 golang 的 runtime 在底层就是实现了 n 对 m 的线程+协程模型,当然比 py3 的语法糖强多了
wwqgtxx
2018-01-17 21:04:32 +08:00
@owenliang gevent 是有多路的,通过 libev 实现了对 socket api 的多路复用
owenliang
2018-01-17 21:41:19 +08:00
@wwqgtxx 我是指 select 多路 channel
doubleflower
2018-01-17 23:31:41 +08:00
python 这个 asyncio 第一天粗看了一遍文档看得云里雾里,还好晚上想了一.晚想通了,不如像 js 这样简单化处理
Earthson
2020-02-21 16:47:13 +08:00
有像 join 的 asyncio.gather,还有一个类似 select 的 asyncio.wait,要是没啥依赖,直接丢 asyncio.create_task

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/423681

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX