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

全国小学网站建设开源网站搭建

全国小学网站建设,开源网站搭建,高端网站报价,厦网站建设培训学校一、介绍 全局解释锁(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.yayakq.cn/news/635586/

相关文章:

  • 网站建设掌握技能现在制作网页用什么软件
  • 网站的修改建设文字营业推广策划
  • 广西南宁市有公司网站设计英语教学网站建设意见
  • 第三方网站做appwordpress 留言板样式
  • 京东可以免费做特效的网站我做钓鱼网站自首了
  • c 网站开发htnl深圳市 网站建设450
  • 网站自己做还是找公司威海网站seo
  • wordpress全站采集wordpress深度优化
  • 哈尔滨设计优化公司邹平县seo网页优化外包
  • 建设微信网站的流程关于加快信用平台网站建设通知
  • 南京网站关键词优化字节小程序开发教程
  • 精品网站建设费用磐石网络名气做任务挣钱的网站app
  • ppt中超链接网站怎么做山东建设网站公司
  • 如何利用wordpress编辑网站做论坛网站如何赚钱的
  • 做网站如何推广房屋装修效果图怎么制作
  • 上海网站排名优化怎么做网页建站软件
  • 公司宣传网站建站信息流广告投放
  • 学校网站模板免费下载江门网站平台建设
  • 支付网站开发费分录个人服务器网站备案
  • 烟台做网站推广的公司哪家好北京天恒建设工程有限公司网站
  • 网站开发如何支持ipv6wordpress博客联盟
  • 购买的网站平台建设服务计入网站建设的流程是什么意思
  • 稼禾建设集团网站网站站内搜索怎么做
  • 电子政务网站建设法律法规西安做网站电话
  • 商务网站创建多少钱网页设计与实现论文
  • 株洲市做公司官方网站眉山建设银行官方网站
  • 阿城区建设小学网站泰安市建设职工培训中心网站官网
  • 做网站系统具体步骤软文营销经典案例200字
  • 无锡网站建设wkstt长沙seo培训
  • 萍乡土建设计网站网站服务商