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

来源:11-1 python 中的 GIL

慕数据957128

2019-02-28

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

写回答

1回答

bobby

2019-03-03

  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
2
bobby
回复
慕数据957128
是的,cpython中会有gil,很多其他python解释器都在致力于解决这个问题
2019-03-05
共2条回复

Python3高级核心技术97讲,高级进阶的必学课程

socket编程/多线程/多进程/线程池/asyncio并发编程/协程和异步IO

2121 学习 · 551 问题

查看课程