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

155 天前
 shinonome

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

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

9110 次点击
所在节点    Python
70 条回复
fanhed
155 天前
CPU 密集就线程, io 密集就协程, 这两者各有擅长, 一起配合才是王道
mayli
155 天前
应该只有超高并发有携程的需求,io 密集到一定程度,携程也没啥优势。
感觉只有高并发是硬需求
NXzCH8fP20468ML5
155 天前
上面说什么线程适合 cpu 密集型,协程适合 io 密集型,基本上都在胡说八道。

协程的本质是一种在允许在应用态自定义的任务调度策略/方式/单元。
线程本质则是系统自带的任务调度策略/方式/单元,对应用是透明无感的。

只是某些场景只用线程的话,导致线程过多,线程切换导致大量无意义的性能开销,为了避免线程的频繁切换,因此搞出了协程。

协程是要以线程作为载体的!!!你起一百万个协程,底层还是要起几十个线程去执行这些协程,只不过这些协程的切换完全可以由应用自定义协程的调度策略(一般由运行时或编译器来做这件事情)。

常见协程的误区:

协程也可以是抢占式的,比如 go 的协程调度就是抢占式的。

cpu 密集型应用一样能适用于协程。
比如说 dataframe OLAP 引擎,就是用 tokio 的协程做任务调度。没做什么调整就得到了很高的性能。
其他 OLTP 引擎,一般都是 Cpp 或者 Java ,没有完善的协程机制,导致不得不实现 pipeline 模型的做自定义算子调度,复杂度大大提高。
moudy
155 天前
windows 95 相对于 windows 3.2 的升级就是从携程变成了线程,亲
netabare
155 天前
没有线程哪来的协程?

或者 op 想说的是手写线程池动不动开个新线程那种做法?
anjingdexiaocai
155 天前
虽然刚接触协程,看这个帖子,感觉 v 站上菜鸟还真挺多的,协程是语言层面上可控的一种轻量级线程,本来就是基于多线程,怎么会用不到…
leonshaw
155 天前
线程之于协程就像 CPU 逻辑核之于线程。想一下在有线程的情况下 SMP 是不是没有意义了。有 GIL 另说。
echo1937
155 天前
如果是 Java 的 Project loom 这种有栈协程,无脑协程其实也没啥,就是会有一些问题;

1、cpu密集型的任务并不会快
2、执行的任务中不能有被pin住的操作,比如第三方库里很常见的 synchronized 锁和 native frame
skuuhui
155 天前
目前开来,在 python 目前现状中,协程确实是最好的选择了,因为有解释锁+上下文切换,线程在 python 中似乎怎么也无法上得了台面。
shinonome
155 天前
@netabare #25 emmm 嗯,是这样想的
Austaras
155 天前
非要咬文嚼字的话协程从定义上来讲就是不能抢占的,go 那个也不叫协程啊它叫 go 程 goroutine
hefish
155 天前
python 支持多线程了? 哪个版本开始的?
k9982874
155 天前
协程理解成线程语法糖就行了,底层由语言决定使用什么策略分片,不需要想太多。
当然考八股就当我没说
GeekGao
155 天前
细品:在一个应用中,可使用多线程来处理 CPU 密集型任务,同时使用协程来处理 IO 密集型任务。
NoobPhper
155 天前
又来个小子
shinonome
155 天前
@GeekGao #34 但是这在 python 中也是吗,python 中多线程也处理不了 CPU 密集的呀
shinonome
155 天前
@NoobPhper #35 这不是来虚心请教大家嘛
shinonome
155 天前
TVT 这是 python 分区啊,你们说的其他语言我也不懂啊,python 多线程有锁啊
GeekGao
155 天前
@shinonome
不是处理不了,是 CPython 目前多线程效率低,但是其他 NoGIL 的 Python 实现一样可以哇,例如 IronPython 。
而且,可以把 CPython 线程模块换成多 multiprocess 就好了嘛。
leegoo
155 天前
python 应该也有线程池的把。
我想楼主 是不是想表达
以前做一些耗时任务的时,都是把任务丢到线程池里面去
那么现在有协程的话,是不是可以省略创建线程池,把任务放到线程池里面动作,也可以减少线程池的维护工作

并不是纠结协程是怎么来的

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

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

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

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

© 2021 V2EX