采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
在本节bobby老师提到线程之间存在gil锁,导致不能充分利用cpu的多核的资源,只能利用一个核。那么在多核cpu上,比如服务器常见32核、128核是很常见的,那么只能利用一个核,那企不是太浪费pcu硬件资源?在单进程的情况下,究竟有没有办法实现这个进程里的多线程分布到多个核上运行呢?有次面试时面试官告诉我是可以的,但是没有告诉我细节。 如果上面问题的答案是否定的,那么只能通过多进程来实现充分利用多核的资源了?有多少个核就跑多少个进程这样cpu利用率最高。
首先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,你可以了解一下这个
非常感谢!了解到gil只是当前在cpython下的局限性而已
是的,cpython中会有gil,很多其他python解释器都在致力于解决这个问题
登录后可查看更多问答,登录/注册
socket编程/多线程/多进程/线程池/asyncio并发编程/协程和异步IO
1.2k 31
1.1k 24
1.1k 16
1.4k 10
1.1k 9