python并发编程之多线程和多进程

了解过python 编程语言的人,可能很多人都听过,python的多线程是假的。

之所以这么说的原因是因为,大家应该都知道python 是一门解释型语言,在cpython解释器中有一个GIL(Global Interpreter Lock),全局解释锁,它是一把全局锁,作用在python解释器上。

它的作用就是让CPU同时只能执行一个python线程,也就是说python并发编程失去了意义。

而之所以有GIL的存在,是因为python语言使用了大量的c语言库,GIL是为了解决引入C语言库的并发问题,并且因为使用的是单锁,因此也排除了死锁的问题。

cpython使用的是引用计数的方式解决垃圾回收的问题,因此为了防止其它线程更改计数参数,因此才有了GIL,如果使用的是其它的垃圾回收方式,那么就不会有GIL的问题。

怎么解决python的GIL功能呢?

GIL功能并不是完全一无是处,它在CPU密集型的任务中,因为单线程问题会导致python并发失去意义,但在IO密集型的任务中,因为不需要使用CPU的多核优势,因此多线程依然有其作用。

原因是因为IO任务,python线程进入等待,python解释器会释放GIL。

如果在CPU密集型的任务中,可以使用python多进程实现并发任务,原因就是python每个进程都会有一个自己的解释器,这时不同的解释器之间无法干涉,因此多进程就实现多线程的效果;但由于创建进程会比创建线程消耗更多的资源,因此多进程会对服务器造成更大的压力。

还有一个办法就是使用Python协程,其也可以解决并发问题。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值