进程,线程,协程的区别

1.调度的基本单位
在传统的操作系统中,进程是作为独立调度和分派的基本单位,每次调度是需要进行上下文的切换,由于进程有自己的程序段、相关数据段以及进程控制快,所以切换开销比较大,引入线程的操作系统中,线程是作为单独调度和分派的基本单位,线程切换上下文需要切换到内核,所以开销比协程大点,但是他没有自己的数据段所以比进程开销小,协程是属于用户级别的线程,它依附于进程或者线程执行,所以他不是独立调度和分派的基本单位,需要用户开发调度算法,他的切换在用户态就能完成
2.并发性
在引入线程的操作系统中,不仅进程之间可以并发,同一进程的线程也能并发,而协程是用户完成调度的,所以协程之间只能有一个在运行,其他协程在等待运行的协程让出CPU
3.拥有资源
进程是系统分配资源的基本单位,而线程和协程并不拥有系统资源,仅有一点必不可少、能保证独立运行的资源。
4.独立性
进程拥有自己的内存空间,进程和进程之间内存空间是独立的隔离状态,而进程中线程和协程除了私有的运行资源外,其他是共享进程的系统资源
5.系统开销
创建和销毁进程时,系统都要为之分配和回收进程控制块、分配或回收其他资源,比如内存空间和IO等,开销大。创建和销毁线程或协程时,系统只需要分配或回收线程控制块,开销小。在进程切换时需要上下文的切换,而进程所需要的上下文比线程和协程大很多,切换线程需要切换到内核而协程不需要,所以从切换开销来看,进程比线程大,线程比协程大
6.使用场景
当单个进程的内存不能满足应用开销时可以考虑多进程,在使用多进程时要注意进程之间的通信问题,在需要大量CPU和系统调用时,在多核系统上可以考虑使用多线程,这样可以充分利用多核处理任务,在有大量IO操作的应用中可以考虑协程,因为大部分时间处于等待状态为了避免不必要的从用户切换到内核代理的开销,而且协程的调度算法可以用户自己实现,可以更加自己的场景优化调度算法
7.系统相关性
进程在不同的系统实现方式不一样,和系统强相关,线程需要在引进线程的操作系统中才能使用,和系统强相关,调度算法进程和线程都是系统固定的不能用户自定义,协程和系统无关,调度算法也可以用户自定义

你可能感兴趣的:(进程,线程,协程的区别)