Java教程

线程进程以及协程的区别

本文主要是介绍线程进程以及协程的区别,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

进程

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

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

线程

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

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

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

协程

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

协程与线程的区别

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