多进程和多线程、协程

进程的同步互斥

临界资源 :多个进程或者线程都能够操作的共享资源
临界区 : 操作临界资源的代码段

同步 : 同步是一种合作关系,为完成某个任务,多进程或者多线程之间形成一种协调,按照约定或条件执行操作临界资源。

互斥 : 互斥是一种制约关系,当一个进程或者线程使用临界资源时进行上锁处理,当另一个进程使用时会阻塞等待,直到解锁后才能继续使用。

线程
线程也是一种多任务编程方法,可以利用计算机多核资源完成程序的并发执行。线程又被称为轻量级的进程。

线程特征

  • 线程计算机多核分配的最小单位
  • 一个进程可以包含多个线程
  • 线程也是一个运行的过程,消耗计算机资源,多个线程共享进程的资源和空间
  • 线程的创建删除消耗的资源都要远远小于进程
  • 多个线程之间执行互不干扰
  • 线程也有自己的特有属性,比如指令集 ID

进程线程的区别和联系

  1. 两者都是多任务编程方式,都能够使用计算机的多核资源
  2. 进程的创建删除消耗的计算机资源比线程要多
  3. 进程空间独立,数据相互不干扰,有专门的IPC,线程使用全局变量进行通信
  4. 一个进程可以创建多个线程分支,两者之间存在包含关系
  5. 多个线程公用进程的资源,在资源操作时往往需要同步互斥
  6. 进程线程在系统中都有自己特有的属性,ID,代码段,栈区等资源

使用场景

  • 需要创建较多并发,同时任务关联性比较强时一般用多线程
  • 不同的任务模块可能更多使用进程
  • 使用进程线程需要考虑数据的处理复杂度,比如进程间通信是否方便,同步互斥是否过于复杂

python线程的GIL问题 (全局解释器锁)

python–》支持多线程–》同步互斥–》加锁–》
超级锁,给解释器加锁–》解释器同一时刻只能解释一个线程

后果 : 一个解释器同一时刻只能解释执行一个线程,所以导致python线程效率低下。但是当遇到IO阻塞时线程会主动让出解释器,因此python线程更加适合高延迟的IO程序并发。

协程

定义 : 纤程,微线程。协程的本质是一个单线程程序,所以协程不能够使用计算机多核资源。

作用 : 能够高效的完成并发任务, 占用较少的资源。因此协程的并发量较高

原理 : 通过记录应用层的上下文栈区,实现在运行中进行上下文跳转,达到可以选择性地运行想要运行的部分,以此提高程序的运行效率。

优点 : 消耗资源少、无需切换开销、无需同步互斥、IO并发性好

缺点 : 无法利用计算机多核

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值