进程,线程,协程的区别

进程
  • 不共享任何状态

  • 调度由操作系统完成

  • 有独立的内存空间(上下文切换的时候需要保存栈、cpu寄存器、虚拟内存、以及打开的相关句柄等信息,开销大)

  • 通讯主要通过信号传递的方式来实现(实现方式有多种,信号量、管道、事件等,通讯都需要过内核,效率低)

线程
  • 共享变量(解决了通讯麻烦的问题,但是对于变量的访问需要加锁)

  • 调度由操作系统完成

  • 一个进程可以有多个线程,每个线程会共享父进程的资源(创建线程开销占用比进程小很多,可创建的数量也会很多)

  • 通讯除了可使用进程间通讯的方式,还可以通过共享内存的方式进行通信(通过共享内存通信比通过内核要快很多)

  • 线程的使用会给系统带来上下文切换的额外负担。

协程
  • 调度完全由用户控制

  • 一个线程(进程)可以有多个协程

  • 每个线程(进程)循环按照指定的任务清单顺序完成不同的任务(当任务被堵塞时,执行下一个任务;当恢复时,再回来执行这个任务;任务间切换只需要保存任务的上下文,没有内核的开销,可以不加锁的访问全局变量)

  • 协程需要保证是非堵塞的且没有相互依赖

  • 协程基本上不能同步通讯,多采用异步的消息通讯,效率比较高


作者:倚天杖
链接:https://www.imooc.com/article/40799
来源:慕课网

转载于:https://www.cnblogs.com/xuchunlin/p/10329311.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值