并发 编程

了解并发编程之前,要先了解一下python的GIL全局解释器锁

多进程和多线程

GIL是在一段代码执行前,先把代码转成cpython,供CPU识别,GIL 保证CPython进程中,只有一个线程去执行字节码。甚至在多核的情况下,也只允许同时只有一个CPU运行一个线程的进程。

虽然GIL是一个互斥锁,但是它是不安全的 (比如开启多个线程,去数据库拿数据,比如拿了个用户,叫XX,他是5岁,一个线程得到是5岁,修改XX为4岁,然后sleep了5s,又去运行另一个线程,这个时候这个线程拿到的数据是5岁,其实应该拿到的是4岁,造成了数据混乱)

在CPython中由于有GIL存在,IO密集型,使用多线程较为合算;CPU密集型,使用多进程,要绕开GIL。

多进程:进程是资源调度的最小单位,一个进程可以运行多个线程,也可以只运行一个线程,(python的多线程,某种意义上也是单个线程运行的,只不过资源切换比较快,看不出来区别),计算密集型用多进程

多线程:由于线程之间是进行随机调度,并且每个线程可能只执行n条执行之后,当多个线程同时修改同一条数据时可能会出现脏数据, 所以出现了线程锁,即同一时刻允许一个线程执行操作。

并发:指的是任务数多余cpu核数,通过操作系统的各种任务调度算法,实现用多个任务“一起”执行(实际上总有一些任务不在执行,因为切换任务的速度相当快,看上去一起执行而已)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值