关于python多线程GIL锁的问题

纯属个人理解:如有不妥,希望能被指出。

GIL全局解释锁,在CPython解释器中所应用。
因为其的存在,导致python名义上的多线程实际上同一时间只有一个线程在运行。比如使用了多个线程的计算机密集型程序,只会在单cpu上运行。
所以python多线程运行io密集型任务很友好,cpu密集型任务反而。。。

当初为什么要用GIL?
为了不让多个线程同时执行同一字节码,避免多个线程同时对某个对象进行操作,也就是所说线程安全问题。刚开发python的时代还是计算机单核的时代,GIL设计简单,不影响性能。
python中多线程是如何执行的
IO密集型中
CPU密集型中会等待其执行一定的字节码才会释放GIL

解决方法:
1、使用进程池,当一个线程想要执行cpu密集型工作时,会将任务发给进程池。进程池会在另外一个进程中启动单独的python解释器来工作。由于任务在单独解释器中执行,那么不受限于GIL。
2、使用C扩展编程技术。将计算机密集型任务转给C。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Python多线程中,有一个重要的概念是全局解释器(Global Interpreter Lock,GIL)。引用\[2\]中提到,PythonGIL负责Python解释器的线程安全,它保证了在任何时刻只有一个线程在执行字节码。这意味着,即使在多核CPU上,Python多线程机制也只能同时执行一个线程。因此,对于CPU密集型任务,使用多线程并不能真正提高程序的运行效率。 然而,对于I/O密集型任务,多线程仍然可以提供一定的性能优势。因为当一个线程在等待I/O操作完成时,其他线程可以继续执行,从而充分利用了CPU的空闲时间。此外,Python还提供了线程池和协程等机制,可以进一步提高I/O密集型任务的效率。 在多线程编程中,需要注意线程安全性和共享资源的竞争问题。由于多个线程可能同时访问和修改共享资源,可能会导致数据不一致或者竞争条件的发生。为了解决这个问题,可以使用(Lock)或者其他同步机制来保护共享资源的访问。 总结来说,Python多线程机制在CPU密集型任务上并不能真正提高程序的运行效率,但在I/O密集型任务上仍然可以提供一定的性能优势。在多线程编程中,需要注意线程安全性和共享资源的竞争问题,并使用适当的同步机制来保护共享资源的访问。 #### 引用[.reference_title] - *1* *2* *3* [Python多线程详解](https://blog.csdn.net/qq_38236620/article/details/127474040)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值