在可以用协程的情况下是不是多线程已经完全没有意义了

2024-06-20 20:53:28 +08:00
 shinonome

协程更加的灵活,同时相比于多线程,开销也更小了,

感觉 python 在有锁的情况下感觉除非不支持协程,不然没有必要多线程了

11160 次点击
所在节点    Python
70 条回复
milkpuff
2024-06-21 22:51:07 +08:00
线程处理回调,协程直接编写完整的请求/处理逻辑,在函数运行中自动挂起和恢复,比写回调体验更好。
9c04C5dO01Sw5DNL
2024-06-21 22:56:33 +08:00
当然不是,协程涉及线程上下文切换。而在某些场景下可以通过保持一个/一系列任务始终在同一线程下来避免不必要的线程上下文切换或者锁开销
ProphetN
2024-06-23 00:55:53 +08:00
应该说有了协程,线程池完全没有意义了。很多业务本身就是自身单线程需求,无需多线程,用协程反而增加开销。
EndlessMemory
2024-06-23 07:52:28 +08:00
协程编程都不方便,同时还得支持协程
wisej
2024-06-23 14:20:13 +08:00
@shinonome 在 python 的框架下(有 GIL ),我觉得你说的问题不大。反正 cpu intensive 需要用多进程,io intensive 的协程上下文切换开销小于多线程。

协程又分有栈协程、无栈协程,后者的理论性能又更高。
sgld
2024-06-25 00:56:40 +08:00
@amlee 这是多进程的事吧
jacktanwhu
2024-07-03 11:03:38 +08:00
@dearmymy 求相关的资料?
Darlewo
2024-07-04 16:44:10 +08:00
@amlee cpu 密集的多线程也不顶用啊
UN2758
2024-07-05 18:29:26 +08:00
可以用的情况,不代表好用,比如你想在已有的 django 项目里实现一个简单多文件上传功能,这种情况你想用协程还是线程池?当你还在考虑哪里 await 和 async for 的时候,我直接 pool.starmap_async 了,协程有时候可用并不代表开发效率能赶上线程
kxg3030
2024-07-06 16:19:30 +08:00
脱离 python 多线程是可以利用 cpu 多核进行并行任务处理的 而如果单个线程的任务是 io 密集型的 协程依然有很大的用 可以实现时间片的主动让出达到异步的效果

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

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

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

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

© 2021 V2EX