pythonGIL锁

一、GIL(Global Interpreter Lock)全局解释器锁是Python解释器中的一个机制,用于保证同一个时间只有一个线程能够执行Python字节码。这意味着在同一个时刻,只有一个线程能够访问共享的Python对象。

1、数据都是全局共享的,没有GIL锁的保护,多个线程同时访问时可能会造成数据的争抢,导致数据的不准确。
2、多个线程对用一个数据进行更新时,没有GIL锁的保护,很可能导致数据的不一致性和数据的损坏。

二、由于有GIL锁的存在,多线程是不能进行并行任务的,而多核的环境是可以使用多进程进行并行任务,因为每个进程中都会有各自的GIL锁,互不影响。

并行:指同一时刻多个任务同时执行;各自同时执行,不会抢占资源;只有多个cpu的时候才会有并行的发生,如果只有一个cpu是不会发生并行的。
并发:指同一时间段内有多个任务同时执行;指的是宏观的同时执行,会互相抢占资源的。

三、GIL锁的释放:
1、遇到I/O阻塞会自动释放GIL锁;
2、一个线程执行完成也会释放GIL锁。

四、如何避免使用GIL锁呢?
1、在进行I/O阻塞的操作任务的时候,可以使用多线程
2、使用多进程去实现任务
3、使用with nogil语句(此方法作者未使用过,是在网上看到的,读者们可以尝试一下)

def test():
    with nogil:
        for i in range(10):
            print(i)
    return 2

你可能感兴趣的:(python,开发语言)