一、进程
程序是由指令和数据构成的,而指令要运行就要加载到CPU中,数据要读写就要将数据加载到内存中。进程就是用来加载指令,管理内存和io的,操作系统会以进程为单位,分配系统资源(时间片,内存等),就是说,进程是资源分配的最小单位。
二、线程
线程存在于进程中,是进程中的实体,也可以称为轻量级进程,是CPU调度执行的最小单位。
两者间的区别与联系:
1.进程是相互独立的,线程存在于进程中。
2.进程内有共享的资源,可以供其内部的线程共享。
3.线程共享进程间的内存,其通信相对于进程要简单。比如多个线程可以共享一个变量。
三、协程
协程是一种基于线程之上,但又比线程更加轻量级的存在,协程不是被操作 系统内核所管理,而是在用户态执行,具有对内核来说不可见的特 性。
三者间联系可如下图:
协程是由一个线程组成的,对于多线程,其有如下好处:
1.线程的切换是由操作系统调度的,而协程由用户自己进行调度,因此减少了上下文切换(上下文切换会涉及用户态到内核态的转换,会花费大量成本,因此要尽量避免不必要的上下文切换)提高了效率。
2.协程stack大小远小于线程更轻量。因此可以在相同的内存中开启更多的协程。
3.不需要多线程的锁机制:协程由一个线程执行,不存在读写变量冲突,在协程中控制共享资源不需要加锁,只需要判断状态,所以执行效率比多线程高很多。
四、管程
管程是指管理共享变量以及对共享变量操作的过程,让它们支持并发,Java中synchronized就是基于Monitor管程来实现的。
版权声明:本文为qq_44146560原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。