GIL全局解释器锁

僤鯓⒐⒋嵵緔 提交于 2019-12-02 03:32:05

‘’‘

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()



易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!