python多线程与多进程简略介绍

GIL介绍

在python中GIL的限制导致不论是在单核还是多核条件下,同时刻都只能运行 一个线程, 这使得Python多线程无法发挥多核并行的优势。

GIL全称为Global Interpreter Lock意思是全局解释器锁,其设计之初是出于对数据安全的考虑。在Python多线程下,每个线程的执行方式分如下三步。

  1. 获取GIL。

  2. 执行对应线程的代码。

  3. 释放GIL。

可见,某个线程要想执行,必须先拿到GIL。我们可以把GIL看作通行证,并且在一个Pyhon进程中,GIL只有一个。线程要是拿不到通行证,就不允许执行。这样会导致即使在多核条件下,一个Python进程中的多个线程在同一时刻也只能执行一个。

而对于多进程来说,每个进程都有属于自己的GIL,所以在多核处理器下,多进程的运行是不会受GIL影响的。也就是说,多进程能够更好地发挥多核优势。

不过,对于爬虫这种I0密集型任务来说,多线程和多进程产生的影响差别并不大。但对于计算密集型任务来说,由于GIL的存在,Python多线程的整体运行效率在多核情况下可能反而比单核更低。而Python的多进程相比多线程,运行效率在多核情况下比单核会有成倍提升

多线程适场景:

  • 大量的IO操作,如网络通信,文件读写等等。
  • 并发处理请求和响应的Web应用程序。
  • 处理数据流和流媒体。

多进程适场景:

  • 计算密集型任务,如图像处理、数据挖掘等等。
  • 并发处理多个CPU密集型任务的应用程序。
  • 需要执行高性能并发任务的大型企业应用程序。

从整体来看,Python 的多进程比多线程更有优势。所以,如果条件允许的话,尽量用多进程。值得注意的是,由于进程是系统进行资源分配和调度的一一个独立单位,所以各进程之间的数据是无法共享的,如多个进程无法共享一个全局变量 ,进程之间的数据共享需要由单独的机制来实现。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Jesse_Kyrie

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值