ICode9

精准搜索请尝试: 精确搜索
首页 > 系统相关> 文章详细

线程进程以及协程的区别

2021-05-24 12:05:58  阅读:115  来源: 互联网

标签:协程 调度 线程 切换 进程 资源


进程

进程,保存在硬盘上的程序运行之后,会在内存里形成一个独立的内存体,这个内存体有自己独立的地址空间,有自己的堆,上级挂靠单位是操作系统,操作系统会以进程为单位分配系统资源(CPU时间片,内存等资源),进程是资源分配的最小单位。

  • 进程间的通信
    1、 管道 2、消息队列 3、信号量 4、共享内存 5、套接字

线程

线程也成为轻量级线程,是操作系统调度(CPU调度)执行的最小单位

进程和线程之间的区别和联系

  • 调度:线程作为调度和分配的基本单位,进程作为拥有资源的基本单位
  • 并发性:不仅进程之间可以并发执行,同一个进程的多个线程之间也可以并发执行;
  • 拥有资源:进程是拥有资源的独立单位,线程不拥有系统资源。进程所包含的资源:如地址空间,打开的文件句柄集,文件系统状态,信号处理的handle。线程所维护的运行相关资源:运行栈,调度相关的控制信息,待处理的信号集。
  • 系统开销: 在创建爱你和撤销进程时,由于系统都要为之分配和回收资源,导致系统的开销明显大于创建和撤销线程的开销
  • 健壮性:进程拥有独立的地址空间,一个进程的崩溃,在保护模式下不会对其他进程产生影响,但是进程是一个进程中的不同执行路径,线程拥有自己的堆栈和局部变量,但是线程之间没有独立的地址空间,一个进程的死掉,等于进程中的所有线程死掉。

协程

协程是比线程更加轻量级的存在,协程是不被操作系统内核所管理的完全是程序所控制,也就是在用户态上执行,这样带来的好处就是性能得到了很大的提升。不像线程切换耗费资源。从技术的角度来讲,协程就是你可以展厅执行的函数,协程有用自己的寄存器上下文和栈,协程调度切换时候,将寄存器上下文和栈保存到其他地方,在切换回来时候恢复之前保存的寄存器和栈,直接操作栈则没有内核切换的开销,可以不加锁访问全局变量。所以上下文的切换非常快。

协程与线程的区别

  • 一个线程可以有多个协程,一个进程可以拥有多个协程
  • 协程是异步机制,而线程以及进程是同步机制。
  • 协程能保留上一次调用的状态,每次过程重入的时候,就相当于进入了上一次调用的状态。
  • 线程是抢占式,而协程是非抢占式,所以需要用户自己释放使用权来切换到其他协程,因此同一时间其实只有一个协程拥有运行权,相当于单线程的能力。
  • 协程不是取代线程,而是抽象于线程只上,线程是分割的CPU 资源,协程是组织好的代码流程,协程需要线程来承载运行,线程是协程的资源,但协程不会直接使用线程,协程直接李艳的是执行器(interceptor),执行器可以关联任意线程和线程池
  • 线程是协程的资源,协程通过Interceptor来间接的使用线程这个资源。

标签:协程,调度,线程,切换,进程,资源
来源: https://www.cnblogs.com/wsl-hitsz/p/14803748.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有