当前位置: 首页 > news >正文

室内设计效果图说明站长工具seo查询软件

室内设计效果图说明,站长工具seo查询软件,wordpress好的主题,石家庄做网站推广一、介绍 全局解释锁(Global Interpreter Lock,GIL)是在某些编程语言的解释器中使用的一种机制。在Python中,GIL是为了保证解释器线程安全而引入的。 GIL的作用是在解释器的执行过程中,确保同一时间只有一个线程可以…

一、介绍

全局解释锁(Global Interpreter Lock,GIL)是在某些编程语言的解释器中使用的一种机制。在Python中,GIL是为了保证解释器线程安全而引入的。

GIL的作用是在解释器的执行过程中,确保同一时间只有一个线程可以执行Python字节码。这意味着在多线程的情况下,同一时刻只有一个线程可以真正地执行Python代码,其他线程只能等待。这是因为GIL会在解释器的关键部分进行加锁,阻止其他线程的执行。

二、 对多线程 Python 程序的影响

CPU 密集型程序是那些将 CPU 推向极限的程序。这包括进行数学计算的程序,如矩阵乘法、搜索、图像处理等。

I/O 绑定程序是花时间等待输入/输出的程序,这些输入/输出可能来自用户、文件、数据库、网络等。I/O 绑定程序有时必须等待很长时间,直到它们从源获得所需的内容,因为源可能需要在输入/输出准备就绪之前进行自己的处理,例如,用户考虑在输入提示或在其自己的进程中运行的数据库查询中输入什么。

下面是一个多线程的程序

# single_threaded.py
import time
from threading import ThreadCOUNT = 50000000def countdown(n):while n>0:n -= 1start = time.time()
countdown(COUNT)
end = time.time()print('Time taken in seconds -', end - start)

 

 现在修改了代码,以使用两个线程并行执行相同的倒计时代码:

# multi_threaded.py
import time
from threading import ThreadCOUNT = 50000000def countdown(n):while n>0:n -= 1t1 = Thread(target=countdown, args=(COUNT//2,))
t2 = Thread(target=countdown, args=(COUNT//2,))start = time.time()
t1.start()
t2.start()
t1.join()
t2.join()
end = time.time()print('Time taken in seconds -', end - start)

 再次运行,结果如下:

 两个版本完成所需的时间几乎相同。在多线程版本中,GIL 阻止 CPU 绑定线程并行执行。

GIL 对 I/O 绑定的多线程程序的性能没有太大影响,因为在线程等待 I/O 时,锁在线程之间共享。

但是,线程完全受 CPU 限制的程序,例如,使用线程在部分中处理图像的程序,不仅会因为锁而变成单线程,而且执行时间也会增加,如上例所示,与编写为完全单线程的情况相比,多线程增加的时间是由获取锁和释放锁带来的开销。
 

三、如何摆脱 Python 的全局锁的限制

1、使用多进程方法

每个 Python 进程都有自己的 Python 解释器和内存空间,因此 GIL 不会成为问题。Python 有一个多进程multiprocessing 模块,它让我们可以轻松地创建这样的进程:

from multiprocessing import Pool
import timeCOUNT = 50000000
def countdown(n):while n>0:n -= 1if __name__ == '__main__':pool = Pool(processes=2)start = time.time()r1 = pool.apply_async(countdown, [COUNT//2])r2 = pool.apply_async(countdown, [COUNT//2])pool.close()pool.join()end = time.time()print('Time taken in seconds -', end - start)

与多线程版本相比,性能有所提高。

 

 
2、使用 使用并发库,比如cython 、asyncio、gevent、eventlet 等。这些库使用非阻塞 I/O 和协程等技术,可以在单个线程中实现高效的并发处理,避免 GIL 的限制。来避开全局锁

 

3、使用替代Python解释器

Python有多个解释器实现。CPython,Jython,IronPython和PyPy,分别用C,Java,C#和Python编写,是最受欢迎的。GIL 只存在于 CPython 的原始 Python 实现中。如果你的程序及其库可用于其他实现,那么也可以尝试使用它们。当然使用非官方解释器的代价是:无法使Cython.
 

参考:

什么是Python全局锁(GIL),如何避开GIL限制?_python 全局锁___弯弓__的博客-CSDN博客

http://www.yidumall.com/news/45249.html

相关文章:

  • 安徽省建设厅网站产品营销网站建设
  • 个性网页设计提升网页优化排名
  • 沈阳之道网站建设重庆seowhy整站优化
  • 怎么自己做直播网站宁波网络推广优化公司
  • 网站 禁止查看源码域名查询大全
  • 临沂河东建设局网站seo常用的工具
  • 做网站开发的笔记本配置如何进行电子商务网站推广
  • 个人网站前置审批项谷歌seo培训
  • 网站广告的优势域名搜索
  • 今日军事新闻头条打仗苏州seo关键词优化推广
  • 广州seo培训机构东莞seo优化公司
  • 网站建设公司利润分配推广app大全
  • 厦门app开发优化seo是什么意思
  • 万户 网站建设百度搜索风云榜电视剧
  • 政府门户网站群建设模式源云推广
  • 网站下载视频的方法seo网络贸易网站推广
  • 手机网站建设的行情英文网站设计公司
  • dede做的网站怎样去换模版网站案例
  • 北京做网站源代码的google官网登录
  • 如何做网站站内搜索站长分析工具
  • 重庆李家沱网站建设互联网推广招聘
  • 基础建设文本网站如何提交百度收录
  • 做网站推广好做吗seo关键字优化
  • php建设动态网站网店代运营合同
  • 做化妆招生宣传在那些网站可以做广东seo推广哪里好
  • 西三旗网站建设东莞网站seo公司哪家大
  • 阜阳做网站哪家好搜索量查询
  • 软件测试培训一般多少钱深圳网站快速排名优化
  • 哪个网站能找到做夜场的女孩外链工厂
  • 电子商务网站建设推广分析高清网站推广免费下载