GIL全局解释器锁+GIL全局解释器锁vs互斥锁+定时器+线程queue+进程池与线程池(同步与异步)
2024-09-15 08:13:15
以多线程为例写个互斥锁
from threading import Thread ,Lock
import time
mutex = Lock() n = 100 def task():
global n
with mutex:
temp = n
time.sleep(0.1)
n= temp-1 if __name__ == '__main__':
t_l = []
start_time = time.time()
for i in range(100):
t = Thread(target=task)
t_l.append(t)
t.start() for t in t_l:
t.join()
stop_time = time.time()
print(n)
print(stop_time-start_time) 1.GIL(这里是Cpython解释器独有的):本质就是互斥锁,程序中修改共享数据就应该用互斥锁来解决。
互斥锁是阻止多个任务同时运行,同一进程下的多个线程只能运行一个。
都是阻止多个并发线程同一时间只能有一个运行。
即:有了GIL的存在,同一进程内的多个线程同一时刻只能有一个运行,意味着Cpython解释器在一个进程下的多个线程无法实现并行,,意味着无法利用多核优势
但不影响并发的实现 2.为何要有GIL?
因为python解释器自带垃圾回收机制不是线程安全的
GIL可以被比喻成执行权限,同一线程下的所有线程都想要执行,都需要先抢执行权限 如何用?
GIL相当于执行权限,会在任务无法执行的情况下,就强行释放
最新文章
- 原生js事件的添加和删除
- NOIP 2008提高组第三题题解by rLq
- HDU5737 : Differencia
- Symantec更新服务器
- 20145317彭垚 《Java程序设计》第7周学习总结
- HDU 5800 (DP)
- Android HTTPS(5)SSL测试工具
- WEBUS2.0 In Action - 搜索操作指南 - (1)
- Vim的tag系统
- XBox360自制系统的更新(Update)
- DataTable.AcceptChanges方法有何用处
- cocos2d-x 精灵的创建和基本使用
- TimesTen更改CacheGroup管理用户ORACLE结束和TT结束password【TimesTen操作和维修基地】
- D3.js从入门到“放弃”指南
- python学习:函数的递归调用
- xml 转换成对象(采用反射机制对对对象属性赋值)
- 2017-2018-2 20165237 实验三《 敏捷开发与XP实践》实验报告
- Hadoop3集群搭建之——hbase安装及简单操作
- 【webdriver自动化】使用unittest实现自动登录163邮箱然后新建一个联系人
- Jq_input file标签上传图片到服务器
热门文章
- Qt 编程指南10 QImage Mat QPixmap转换
- Qt 编程指南 4 单行编辑控件
- linux 的常用命令---------第十一阶段
- 2017-2018-2 20155314《网络对抗技术》Exp3 免杀原理与实践
- ethereum/EIPs-55 Mixed-case checksum address encoding
- Oracle 11g中的snapshot standby特性
- E325: ATTENTION
- 【Codeforces 111C】Petya and Spiders
- jquery $.each()遍历json数组
- TensorFlow框架下的RNN实践小结