协程,线程,进程之间的对比和选择

协程,线程,进程

 协程线程进程
原理协程有自己的寄存器上下文和栈。协程切换时,将寄存器和栈保存到其他地方,等切回来的时候,恢复之前保存到寄存器上下文和栈。分配CPU资源。多个线程共享堆和方法区资源,每个线程有自己的程序计数器、虚拟机栈和本地方法栈分配系统资源,标识任务。进程占有的资源有:①地址空间②全局变量③文件描述符④各种硬件资源。

优点

1、无需协程上下文切换的开销

2、无需原子操作锁定及同步的开销(不会被线程调度机制打断的操作)通过判断返回状态

3、高并发+高扩展+低成本

注意:python中实现协程通过generater的yield实现

1、有独立的运行栈和程序计数器,线程之间切换开销小

2、共享进程的系统资源

1、有独立的上下文

2、进程之间的系统资源相互独立

3、一个进程崩溃不会影响其他的进程。

缺点

1、无法利用多核资源:协程的本质是单线程,需要线程配合才可以在多CPU上运行

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

1、一个线程的崩溃,会影响本进程的所有线程。

2、有锁机制,可能会死锁

1、进程切换开销大,不利于资源的有效利用

进程和线程的区别:

  1. 一个线程只能属于一个进程,一个进程可以有多个线程,但至少有一个线程
  2. 资源分配给进程,统一进程的所有线程共享所有资源
  3. cpu分配给线程,真正在cpu上运行的是线程
  4. 线程是最小的执行单位,进程是最小的资源管理单位

进程,线程,协程的选择

CPU核数类型选择原因
多核CPUCPU密集型多线程充分利用全部的CPU,又避免了协程切换的性能消耗
IO密集型多线程多协程充分利用全部的CPU,一个线程多个协程可以提高CPU利用率
单核CPUCPU密集型单进程单进程就已经CPU满载了
IO密集型多协程一个进程多个协程提高CPU利用率

僵尸进程,孤儿进程,守护进程

  1. 僵尸进程:在父进程还没有调用wait或者waitpid的方法获取子进程状态的时候,子进程的已经退出。那么子进程的状态描述继续保存在系统中。会导致资源浪费,占用着进程号无法释放,进程号的数量是有限的。
  2. 孤儿进程:父进程已经结束了,但是子进程还在继续,那么子进程就变成了孤儿进程,并且被init收养,这些进程结束后的状态将返回给init
  3. 守护进程:守护进程指一些系统启动的时候就开始允许的进程。他们的原本的父进程都已经结束了,都是孤儿进程,后被init收养,并且作为守护进程一直运行。
 
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值