【为什么有人说Python的多线程是鸡肋呢?】
这话有一定道理,但不代表是事实。
先从多线程说起,需要先理清串行、并行和并发的概念。
从上图可知,并行的效率是最高的。
如果cpu等待外部任务完成的时间大于线程切换的时间,那么并发的效率是高于串行的。因此并发在绝大多数情况下比串行的效率高。
对于单核cpu下的多线程就是采用并发的方式。
python是解释型的语言,在设计之初为了数据安全,采用GIL(全局解释器锁):
1:每个线程需要先获取GIL
2:得到GIL的线程执行代码,主动sleep让出cpu或被挂起。
3:释放GIL以便下一个线程获取。
熟悉多线程编程的朋友,应该很轻易的理解。
显然python里一个进程永远只能由一个线程拿到GIL,GIL需要反复的释放、获取。
因此说”Python的多线程是鸡肋”是有道理的。
但是,就如同单个cpu采用并发的方式一样,能否认它的作用吗?
对于cpu密集型的线程来说,GIL确实影响很大。对于IO密集型,影响很小。
转载请注明:徐自远的乱七八糟小站 » 【为什么有人说Python的多线程是鸡肋呢?】