【发布时间】:2017-05-30 22:34:33
【问题描述】:
goroutines 是否大致等同于 python 的 asyncio 任务,还有一个附加特性是任何 CPU 绑定任务都被路由到 ThreadPoolExecutor 而不是添加到事件循环中(当然,假设我们使用没有 GIL 的 python 解释器)?
我缺少的两种方法之间有什么实质性区别吗?当然,除了并发是 Go 不可或缺的一部分所带来的效率和代码清晰度之外。
【问题讨论】:
-
“任何受 CPU 限制的任务都被路由到它自己的线程”这不是 goroutines 的工作方式,所以我不确定该部分的问题是什么。
-
我认为 go runtime 会动态更改线程数以确保 goroutine 不会相互阻塞。由于事件循环已经可以在不阻塞的情况下处理 I/O 密集型任务,但不能处理 CPU 密集型任务,我得出的结论是,等效的处理方法是将 CPU 密集型任务放在它们自己的线程中。也许我应该说“路由到线程池”而不是“路由到自己的线程”?我编辑了这个问题。
标签: python-3.x go concurrency python-asyncio coroutine