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全局解释器锁的主要内容,如果未能解决你的问题,请参考以下文章