三句话理解python GIL特性,助你开发更好的python程序

参考链接:https://realpython.com/python-gil/

1. 其也就是说,CPU 绑定程序用多线程是无法提升性能的,而I/O绑定程序可以。

2. 比如把一个数据计算均分成两堆,各用一个线程计算则用时不会减少,反而可能因为GIL,这锁的获取和释放的开销导致用时比单线程运行还多一点。解决办法可以用两个进程执行计算,但进程管理的开销并不会把计算时间减少到原来的一半。(参考链接中有示例和其他比较麻烦的解决办法)

3. 但如果一个用户在思考给 input()​ 函数输入什么内容,而有些模块不依赖于该输入的内容,则可以开子线程去执行这些模块。这种操作就有点像协程了。当当前操作挂起了,就去执行其他的模块,直到挂起的操作恢复,再重新执行。只不过其发生在一个主线程中,线程利用率更高效

概括GIL的来龙去脉

1. 为什么有GIL?即GIL用来干嘛?

python至今(2024.4.3)大约34岁了,诞生之初,操作系统并没有线程的概念。为了满足C扩展的线程安全和一些变量引用,垃圾自动回收等问题,才加上此锁。

参考链接的重点段落之一

翻译:

当你观察一个典型的 Python 程序或任何计算机程序时,会发现它们的性能有 CPU 绑定和 I/O 绑定之分。

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

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

原文:

When you look at a typical Python program—or any computer program for that matter—there’s a difference between those that are CPU-bound in their performance and those that are I/O-bound.

CPU-bound programs are those that are pushing the CPU to its limit. This includes programs that do mathematical computations like matrix multiplications, searching, image processing, etc.

I/O-bound programs are the ones that spend time waiting for Input/Output which can come from a user, file, database, network, etc. I/O-bound programs sometimes have to wait for a significant amount of time till they get what they need from the source due to the fact that the source may need to do its own processing before the input/output is ready, for example, a user thinking about what to enter into an input prompt or a database query running in its own process.

  • 4
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值