多线程可以分布到多核上运行?
来源:11-1 python 中的 GIL

慕数据957128
2019-02-28
在本节bobby老师提到线程之间存在gil锁,导致不能充分利用cpu的多核的资源,只能利用一个核。那么在多核cpu上,比如服务器常见32核、128核是很常见的,那么只能利用一个核,那企不是太浪费pcu硬件资源?在单进程的情况下,究竟有没有办法实现这个进程里的多线程分布到多个核上运行呢?有次面试时面试官告诉我是可以的,但是没有告诉我细节。
如果上面问题的答案是否定的,那么只能通过多进程来实现充分利用多核的资源了?有多少个核就跑多少个进程这样cpu利用率最高。
写回答
1回答
-
首先gil锁的存在会导致同一个进程只能有一个线程运行,但是对于io密集型来说使用多进程和多线程其实性能差异不大,而且多进程还耗费更多的内存资源,所以差异在于cpu密集型,这种就必须要使用多进程来启动了,可以同时利用多核cpu资源
第二个问题就是能不能突破gil的限制,明白这个问题之前首先来说明一下cpython,也就是python的解释器,这个就像java中的jvm一样,jvm本身是虚拟机,其上可以运行多种语言比如java, groovy等等非常多的语言,python和java一样 本身没有执行能力,代码都是由cpython和jvm解释和执行的,我们平时用到的python基本上都是cpython,所以gil是cpython的特有,不是python特有的,所以要解决这个问题就需要去换一种python解释器,python的各种解释器都在致力于去GIL,这里做的最好的是pypy,你可以了解一下这个
122019-03-05
相似问题