博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Cpython的全局解释器锁(GIL)
阅读量:6915 次
发布时间:2019-06-27

本文共 1212 字,大约阅读时间需要 4 分钟。

# Cpyrhon解释器下有个全局解释器锁-GIL:在同一    # 在同一时刻,多线程中只有一个线程访问CPU    # 有了全局解释器锁(GIL)后,在同一时刻只能有一个线程访问CPU。    # 全局解释器锁锁的是线程,而不是数据。    # 这种全局解释器锁的特性就是同一时间只有有一个线程访问CPU,所以在多个CPU的情况下,也只有一个线程在一个时间点访问CPU,这是Cpython解释器的特性,这是一个不好的特性        # 到目前为止并没有一个解释器语言可以充分使用多个CPU,一个时间点只能一者访问CPU# 在多线程环境中,python虚拟机按一下方式执行访问CPU:    # 设置GIL    # 切换到一个线程去执行    # 运行指定数量的字节码指令或线程后主动让出控制(可以调用time.sleep())    # 把线程设置为睡眠状态    # 解决GIL    # 再次重复以上所有操作# 高CPU: 在高CPU利用率的代码中,此时这种同一时刻只能有一个线程访问CPU机制会响应效率,如高计算类的代码中。如真遇到这种情况,可以用多进程,不用多线程处理# 高IO:处理文件、处理web请求、爬取网页、设备文件、读写数据、send、recv,我们遇到的基本都是IO的,很少遇到计算类的东西# 比较多线程与多进程的效率。多线程的执行效率会好些,在高IO的情况、和简单的计算类情况下import timefrom threading import Threadfrom multiprocessing import Processdef func(n):    n + 1if __name__ == '__main__':    start = time.time()    t_lst = []    for i in range(100):        t = Thread(target=func, args=(i, ))        t_lst.append(t)        t.start()    for t in t_lst:        t.join()    t1 = time.time() - start    start2 = time.time()    p_lst = []    for i in range(100):        p = Process(target=func, args=(i, ))        p_lst.append(p)        p.start()    for p in p_lst:        p.join()    t2 = time.time() - start2    print(t1, t2)

 

转载于:https://www.cnblogs.com/whylinux/p/9846347.html

你可能感兴趣的文章
centos rocksdb 性能测试笔记(二)
查看>>
iOS开发之多线程浅析
查看>>
jquery 读书笔记
查看>>
修改监控录像时间的方法以及基础常识,必看! ...
查看>>
Troubleshooting High CPU Usage on Alibaba Cloud SQL Server
查看>>
手把手教你监督学习(附python实战代码)
查看>>
DataSet筛选数据然后添加到新的DataSet中引发的一系列血案
查看>>
设置select下拉菜单的默认选中项
查看>>
exe4j的使用
查看>>
TNS-12535 TNS-00505的处理方法
查看>>
R语言:数据输出至文件
查看>>
Linux下搭建 NFS
查看>>
VR AR创新创业大赛顺利收官,行业大咖看好移动VR发展
查看>>
Vive戴起来不够舒服?SynergyWiz为其设计了翻盖
查看>>
新年快乐,介绍个简单的Excel理财工作的制作方法
查看>>
[翻译-ASP.NET MVC]Contact Manager开发之旅之迭代1 - 创建Contact Manager应用
查看>>
Linux C 下使用openssl 进行SHA1加密
查看>>
4星|《我的第一本创业融资指南》:投资人写的创业者融资指南
查看>>
再现一分钱中标,中国电信拿下海南政务云项目
查看>>
文件服务器之二:FTP服务器(pureftp)
查看>>