Python-GIL

面试题

描述Python GIL的概念,以及它对Python多线程的影响

1.主线程死循环

while True:   

     pass

2.2个线程死循环

import threading

# 子线程死循环

def test():

    while True:

        pass

t1 = threading.Thread(target=test)

t1.start()

# 主线程死循环

while True:

    pass

3.2个进程死循环

import multiprocessing

def deapLoop():

    while True:

        pass


# 子进程死循环

p1 = multiprocessing.Process(target=deapLoop)

p1.start()

# 主进程死循环

while True:

    pass

参考答案

python语言和GIL没有关系,仅仅是由于历史原因在Cpython虚拟机,难以移除GIL

GIL:全局解释器锁。每个线程在执行的过程都需要先获取GIL,保证同一时刻只有一个线程可以执行代码

线程释放GIL锁的情况:在IO操作等可能会引起阻塞的system call之前,可以暂时释放GIL,但在执行完毕后,必须重新获取GIL,Python3使用计时器

Python使用多进程是可以利用多核的CPU资源的

多线程爬取比单线程性能有提升,因为遇到IO阻塞会自动释放GIL锁

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 线程 操作系统线程理论 线程概念的引入背景 进程 之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有...
    go以恒阅读 1,693评论 0 6
  • 有所收获,特将原文翻译如下。 原文:What is the Python Global Interpreter L...
    vickeex阅读 393评论 0 2
  • GIL 是什么东西?它对我们的 python 程序会产生什么样的影响? 我们先来看一个问题。运行下面这段 pyth...
    lintong阅读 1,514评论 0 32
  • 概述 GIL(Global Interpreter Lock)是什么东东?为什么当一些Pythoners在开...
    0行痴0阅读 2,772评论 1 3
  • 环境 xubuntu anaconda pycharm python https://www.cnblogs.co...
    Ericoool阅读 1,933评论 0 0