Python 多线程效率不高吗? Python 多线程效率不高吗

Python \u591a\u7ebf\u7a0b\u6548\u7387\u4e0d\u9ad8\u5417

\u5728python\u7684\u539f\u59cb\u89e3\u91ca\u5668CPython\u4e2d\u5b58\u5728\u7740GIL\uff08GlobalInterpreterLock\uff0c\u5168\u5c40\u89e3\u91ca\u5668\u9501\uff09\uff0c\u56e0\u6b64\u5728\u89e3\u91ca\u6267\u884cpython\u4ee3\u7801\u65f6\uff0c\u4f1a\u4ea7\u751f\u4e92\u65a5\u9501\u6765\u9650\u5236\u7ebf\u7a0b\u5bf9\u5171\u4eab\u8d44\u6e90\u7684\u8bbf\u95ee\uff0c\u76f4\u5230\u89e3\u91ca\u5668\u9047\u5230I/O\u64cd\u4f5c\u6216\u8005\u64cd\u4f5c\u6b21\u6570\u8fbe\u5230\u4e00\u5b9a\u6570\u76ee\u65f6\u624d\u4f1a\u91ca\u653eGIL\u3002\u6240\u4ee5\uff0c\u867d\u7136CPython\u7684\u7ebf\u7a0b\u5e93\u76f4\u63a5\u5c01\u88c5\u4e86\u7cfb\u7edf\u7684\u539f\u751f\u7ebf\u7a0b\uff0c\u4f46CPython\u6574\u4f53\u4f5c\u4e3a\u4e00\u4e2a\u8fdb\u7a0b\uff0c\u540c\u4e00\u65f6\u95f4\u53ea\u4f1a\u6709\u4e00\u4e2a\u83b7\u5f97GIL\u7684\u7ebf\u7a0b\u5728\u8dd1\uff0c\u5176\u4ed6\u7ebf\u7a0b\u5219\u5904\u4e8e\u7b49\u5f85\u72b6\u6001\u3002\u8fd9\u5c31\u9020\u6210\u4e86\u5373\u4f7f\u5728\u591a\u6838CPU\u4e2d\uff0c\u591a\u7ebf\u7a0b\u4e5f\u53ea\u662f\u505a\u7740\u5206\u65f6\u5207\u6362\u800c\u5df2\u3002\u4e0d\u8fc7muiltprocessing\u7684\u51fa\u73b0\uff0c\u5df2\u7ecf\u53ef\u4ee5\u8ba9\u591a\u8fdb\u7a0b\u7684python\u4ee3\u7801\u7f16\u5199\u7b80\u5316\u5230\u4e86\u7c7b\u4f3c\u591a\u7ebf\u7a0b\u7684\u7a0b\u5ea6\u4e86\u3002

Python\u7531\u4e8e\u6709\u5168\u9501\u5c40\u7684\u5b58\u5728\uff08\u540c\u4e00\u65f6\u95f4\u53ea\u80fd\u6709\u4e00\u4e2a\u7ebf\u7a0b\u6267\u884c\uff09\uff0c\u5e76\u4e0d\u80fd\u5229\u7528\u591a\u6838\u4f18\u52bf\u3002\u6240\u4ee5\uff0c\u5982\u679c\u4f60\u7684\u591a\u7ebf\u7a0b\u8fdb\u7a0b\u662fCPU\u5bc6\u96c6\u578b\u7684\uff0c\u90a3\u591a\u7ebf\u7a0b\u5e76\u4e0d\u80fd\u5e26\u6765\u6548\u7387\u4e0a\u7684\u63d0\u5347\uff0c\u76f8\u53cd\u8fd8\u53ef\u80fd\u4f1a\u56e0\u4e3a\u7ebf\u7a0b\u7684\u9891\u7e41\u5207\u6362\uff0c\u5bfc\u81f4\u6548\u7387\u4e0b\u964d\uff1b\u5982\u679c\u662fIO\u5bc6\u96c6\u578b\uff0c\u591a\u7ebf\u7a0b\u8fdb\u7a0b\u53ef\u4ee5\u5229\u7528IO\u963b\u585e\u7b49\u5f85\u65f6\u7684\u7a7a\u95f2\u65f6\u95f4\u6267\u884c\u5176\u4ed6\u7ebf\u7a0b\uff0c\u63d0\u5347\u6548\u7387\u3002

Python效率到底高不高?到底是不是鸡肋?Python由于有全锁局的存在(同一时间只能有一个线程执行),并不能利用多核优势。所以,如果你的多线程进程是CPU密集型的,那多线程并不能带来效率上的提升,相反还可能会因为线程的频繁切换,导致效率下降;如果是IO密集型,多线程进程可以利用IO阻塞等待时的空闲时间执行其他线程,提升效率。

多线程,是指从软件或者硬件上实现多个线程并发执行的技术。想要了解不同的线程是怎样运作的,要知道不同线程同时访问资源时,需要使用保护机制,Python中使用GIL(解释器全局锁)。直观上,这是一个加在解释器上的全局(从解释器的角度看)锁。这意味着对于任何Python程序,不管有多少的处理器,任何时候都总是只有一个线程在执行。所以,如果没有IO操作,python中的多线程比单线程效率还低。

根据我同学的说法,如果你只是想做个定时器样的简单东西,对稳定性要求低些,如vb,c#类似的定时器,用多线程吧,但线程的同步要注意了。python的线程更加类似定时器,python的线程不是真线程,但有的场合用这种定时器也能解决很多问题,因为开销小,开启也方便。但是如果你不是这种想法,你可能很难理解。

虽然CPython的线程库直接封装了系统的原生线程,但CPython整体作为一个进程,同一时间只会有一个获得GIL的线程在跑,其他线程则处于等待状态。这就造成了即使在多核CPU中,多线程也只是做着分时切换而已。





扩展阅读:为什么不建议用多线程 ... python多线程 线程池 ... python多线程并行 ... python多线程thread ... python多线程 run方法 ... python真正的多线程 ... python 多线程 print ... python多线程爬虫 ... python多线程怎么跑的 ...

本站交流只代表网友个人观点,与本站立场无关
欢迎反馈与建议,请联系电邮
2024© 车视网