python GIL 多线程 多进程

python 多进程

1、Ubuntu 下使用 htop 监控内存和cpu 的使用状态。

可以看到多数cpu 处于空闲状态。

2、有一段简单的python代码,在test.py 脚本文件内(死循环)

(这里的pass 相当于占位符,空语句。没有io,尽可能多地使用cpu)

3、启动 多个终端(这里启动了3个终端),每个终端都运行上面的代码 python.py

可以看到,有3个cpu利用率到达了100%。

 

------------------------------------------------------------------------------------------------------------------------------------------------------------------

将 test.py 的内容修改如下:

运行后的资源占用情况

可以看到虽然起了3个线程,但是并没有某一个CPU被沾满,但是加起来也只是占用了一个cpu 的 资源。也就是说,任何一个时刻最多只有一个线程在使用cpu,尽管其他的cpu 空闲也不能被使用。python 并没有真正的多并行,只有并发。

 

---------------------------------------------------------------------------------------------------------------------------------------------------------

将多线程改成多进程

启动了4个进程,分别占用了4个CPU核心,真正的多任务。

---------------------------------------------------------------------------------------------------------------------------------------------------------

这是由于GIL (全局解释器锁)的原因,在python 设计之初,计算机还没有多cpu ,并没有考虑并发的问题。GIL 保证每个时刻最多只有一个线程使用cpu。这是用c 语言写的python 解释器的问题,不是python 语言的问题。java 写的python 的解释器也没有这个问题。 现在想移除GIL 并不容易,移除后的效率也不一定会更好。

python test.py -----> (解释器   XXX.py) python 解释器 可以用 C  C++ C++ java 编写。 python 是解释型语言,c c++ 是编译型语言。

python 解释器将python 语言翻译成二进制,有编译和执行的作用。

gcc -share  test.c  【linux 下  C 语言 编译成动态库】

在一些有IO任务的线程中,使用多线程还是比单线程效率更高 ,在进行IO时进行线程的切换。

计算密集型  (多进程)                   IO 密集型 (多线程、协程)

 

解决方法:在子线程中调用其他语言编写的代码。

 

 

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

xieshangxin

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

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

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

打赏作者

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

抵扣说明:

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

余额充值