关于Java并发中的进程、线程、协程、管程及其联系区别

一、进程

        程序是由指令和数据构成的,而指令要运行就要加载到CPU中,数据要读写就要将数据加载到内存中。进程就是用来加载指令,管理内存和io的,操作系统会以进程为单位,分配系统资源(时间片,内存等),就是说,进程是资源分配的最小单位。

二、线程

线程存在于进程中,是进程中的实体,也可以称为轻量级进程,是CPU调度执行的最小单位。

        两者间的区别与联系:

               1.进程是相互独立的,线程存在于进程中。

               2.进程内有共享的资源,可以供其内部的线程共享。

               3.线程共享进程间的内存,其通信相对于进程要简单。比如多个线程可以共享一个变量。

三、协程

      协程是一种基于线程之上,但又比线程更加轻量级的存在,协程不是被操作 系统内核所管理,而是在用户态执行,具有对内核来说不可见的特 性。

                三者间联系可如下图:

协程是由一个线程组成的,对于多线程,其有如下好处:

        1.线程的切换是由操作系统调度的,而协程由用户自己进行调度,因此减少了上下文切换(上下文切换会涉及用户态到内核态的转换,会花费大量成本,因此要尽量避免不必要的上下文切换)提高了效率。      

        2.协程stack大小远小于线程更轻量。因此可以在相同的内存中开启更多的协程。

        3.不需要多线程的锁机制:协程由一个线程执行,不存在读写变量冲突,在协程中控制共享资源不需要加锁,只需要判断状态,所以执行效率比多线程高很多。

四、管程

       管程是指管理共享变量以及对共享变量操作的过程,让它们支持并发,Java中synchronized就是基于Monitor管程来实现的。

 


版权声明:本文为qq_44146560原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。