码迷,mamicode.com
首页 > 其他好文 > 详细

GIL全局解释器锁

时间:2019-10-23 22:05:00      阅读:117      评论:0      收藏:0      [点我收藏+]

标签:serve   服务端   code   多个   reading   pre   rgs   list   get   

‘’‘

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全局解释器锁

标签:serve   服务端   code   多个   reading   pre   rgs   list   get   

原文地址:https://www.cnblogs.com/jinhongquan/p/11729090.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!