GIL全局解释器锁

Posted jinhongquan

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了GIL全局解释器锁相关的知识,希望对你有一定的参考价值。

‘’‘

1.GIL全局解释器锁:
1.GIL是Cpython特有的。
2.GIL本质上是一个互斥锁.
3.GIL的为了阻止同一个进程内多个线程同时执行(并行)

    - 单个进程下的多个线程无法实现并行,但能实现并发
    4.这把锁主要是因为CPython的内存管理不是 "线程安全" 的.
            - 保证线程在执行任务时不会被垃圾回收机制回收。

2.GIL存在的目的:
GIL的存在就是为了保证线程安全的.

注意: 多个线程过来执行,一旦遇到IO操作,就会立马释放GIL解释器锁,交给下一个先进来的线程.

3.何时使用多进程或多线程?
- 在计算密集型的情况下:
- 使用多进程

- 在IO密集型的情况下:
    - 使用多线程

- 高效执行多个进程,内多个IO密集型的程序:
    - 使用 多进程 + 多线程
    - 

‘‘‘
4.服务端实现并发

import socket
from threading import Thread
import time

"""
服务端:
    1.有固定的IP和PORT
    2.24小时不间断提供服务
    3.能够支持并发
"""
server = socket.socket()

server.bind((
    '127.0.0.1', 9550
))

server.listen(5)
print('启动服务端。。。')


def working(conn):
    while True:
        try:
            data = conn.recv(1024)
            if len(data) == 0:
                break
            print(data.decode('utf-8'))
            time.sleep(1)
            conn.send(data.upper())

        except Exception as e:
            print(e)
            break
    
    conn.close()

while True:
    conn, addr = server.accept()
    print(addr)
    # 这里实现并发
    t = Thread(target=working, args=(conn,))
    t.start()



以上是关于GIL全局解释器锁的主要内容,如果未能解决你的问题,请参考以下文章

并发编程——GIL全局解释器锁死锁现象与递归锁信号量Event事件线程queue

GIL(全局解释器锁)

GIL全局解释器锁

python全局解释器锁(GIL)

GIL(全局解释器锁)

Python入门学习-DAY36-GIL全局解释器锁死锁现象与递归锁信号量Event事件线程queue