进程、线程、协程(一) 相关概念归纳

进程

进程就是一个程序在一个数据集上的一次动态执行过程。进程一般由程序、数据集、进程控制块三部分组成。进程调度由操作系统控制。

进程是资源竞争的基本单位。

优点:同时利用多个cpu,能同时进行多个操作。

缺点:耗费内存空间;进程间不共享任何状态;进程通讯需要内核参与,通讯效率低;上下文进程间切换开销大

 

线程

线程也叫轻量级进程,它是一个基本的CPU执行单元,也是程序执行过程中的最小单元,由线程ID、程序计数器、寄存器集合

和堆栈共同组成。线程的引入减小了程序并发执行时的开销,提高了操作系统的并发性能。线程调度由操作系统控制。

线程是程序执行的最小单位。

优点:共享内存;上下文切换开销小;共享内存通讯效率较高

缺点:抢占资源;资源需要加锁访问

 

 

进程和线程的关系

  1. 一个线程只能属于一个进程,而一个进程可以有多个线程,但至少有一个线程。
  2. 资源分配给进程,同一进程的所有线程共享该进程的所有资源。
  3. CPU分给线程,即真正在CPU上运行的是线程。

 

并行和并发

无论是并行还是并发,在用户看来都是'同时'运行的,而一个cpu同一时刻只能执行一个任务。

并行:同时运行,只有具备多个cpu才能实现并行。

并发:是伪并行,即看起来是同时运行,单个cpu+多道技术。也就是一个cpu在多个任务之间快速切换,但在每个时刻最多处理一个任务。

 

多道技术:内存中同时存入多道(多个)程序,cpu从一个进程快速切换到另外一个,使每个进程各自运行几十或几百毫秒,

这样,虽然在某一个瞬间,一个cpu只能执行一个任务,但在1秒内,cpu却可以运行多个进程,这就给人产生了并行的错觉,

即伪并发,以此来区分多处理器操作系统的真正硬件并行(多个cpu共享同一个物理内存)。

 

异步和同步

同步就是指一个进程在执行某个请求的时候,若该进程收不到返回的信息,那么这个进程将会一直等待下去,直到收

到返回信息才继续执行下去;

异步是指进程不需要一直等下去,而是继续执行下面的操作。当有消息返回时系统会通知进程进行处理。

 

多线程

python的多线程:由于cpython有GIL(全局解释器锁),导致同一时刻同一进程中只能有一个线程运行在一个cpu上,而不能有多个线程同时在一个cpu上运行。

 

GIL

cpython解释器要求每个线程在执行时候都需要先获取GIL,保证同一时刻只有一个线程可以执行代码,即同一时刻只有一个线程使用CPU,也就是说多线程并不是真正意义上的同时执行。

如何解决GIL锁的问题,提高效率:

  • 1.更换cpython为jpython等其他解释器
  • 2.使用多进程完成多线程的任务
  • 3.在使用多线程可以使用c语言去实现

因为GIL的存在,只有IO Bound场景下得多线程会得到较好的性能,计算密集型的任务反而效率低下。

 

多进程

Python多线程无法利用CPU多核的优势。因此在Python开发中,我们一般使用多进程进行并行开发。multiprocessing是类似于threading模块的包,它完整的复制了一套多线程thread所提供的接口,可以更充分的利用多核资源。

 

协程

协程可以称为轻量级的线程即微线程。

在一个线程中会有很多函数,我们把这些函数称为子程序,在子程序执行过程中可以中断去执行别的子程序,而别的子程序也可以中断回来继续执行之前的子程序,这个过程就称为协程。协程调度由程序控制(即用户自己控制)。

协程拥有自己的寄存器上下文和栈。协程调度切换时,将寄存器上下文和栈保存到其他地方,在切回来的时候,恢复先前保存的寄存器上下文和栈。因此:协程能保留上一次调用时的状态(即所有局部状态的一个特定组合),每次过程重入时,就相当于进入上一次调用的状态。

优点:

  (1)无需线程上下文切换的开销,协程避免了无意义的调度,由此可以提高性能

  (2)无需原子操作锁定及同步的开销

  (3)方便切换控制流,简化编程模型

缺点:

  (1)无法利用多核资源:协程的本质是个单线程,它不能同时将 单个CPU 的多个核用上,协程需要和进程配合才能运行在多CPU上

  (2)进行阻塞(Blocking)操作(如IO时)会阻塞掉整个程序

 

 

使用场景:

不需要实现复杂的内存共享且需利用多cpu,用多进程;

实现复杂的内存共享及IO密集型应用:多线程或协程;

实现复杂的内存共享及CPU密集型应用:协程

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值