请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

多线程可以分布到多核上运行?

在本节bobby老师提到线程之间存在gil锁,导致不能充分利用cpu的多核的资源,只能利用一个核。那么在多核cpu上,比如服务器常见32核、128核是很常见的,那么只能利用一个核,那企不是太浪费pcu硬件资源?在单进程的情况下,究竟有没有办法实现这个进程里的多线程分布到多个核上运行呢?有次面试时面试官告诉我是可以的,但是没有告诉我细节。
如果上面问题的答案是否定的,那么只能通过多进程来实现充分利用多核的资源了?有多少个核就跑多少个进程这样cpu利用率最高。

正在回答

1回答

bobby 2019-03-03 11:31:17
  1. 首先gil锁的存在会导致同一个进程只能有一个线程运行,但是对于io密集型来说使用多进程和多线程其实性能差异不大,而且多进程还耗费更多的内存资源,所以差异在于cpu密集型,这种就必须要使用多进程来启动了,可以同时利用多核cpu资源

  2. 第二个问题就是能不能突破gil的限制,明白这个问题之前首先来说明一下cpython,也就是python的解释器,这个就像java中的jvm一样,jvm本身是虚拟机,其上可以运行多种语言比如java, groovy等等非常多的语言,python和java一样 本身没有执行能力,代码都是由cpython和jvm解释和执行的,我们平时用到的python基本上都是cpython,所以gil是cpython的特有,不是python特有的,所以要解决这个问题就需要去换一种python解释器,python的各种解释器都在致力于去GIL,这里做的最好的是pypy,你可以了解一下这个

1 回复 有任何疑惑可以回复我~
  • 提问者 慕数据957128 #1
    非常感谢!了解到gil只是当前在cpython下的局限性而已
    回复 有任何疑惑可以回复我~ 2019-03-03 19:18:28
  • bobby 回复 提问者 慕数据957128 #2
    是的,cpython中会有gil,很多其他python解释器都在致力于解决这个问题
    回复 有任何疑惑可以回复我~ 2019-03-05 11:08:51
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信