进程:
正在运行的程序,当一个程序进入内存运行,就变成一个进程(是处于运行中的程序),有一定独立能力
进程拥有自己独立的堆和栈,进程间两者都不共享,进程由操作系统调度.是指操作系统中能独立运行并作为资源分配基本单位.例:任务管理器的一个XX.exe
Java中线程具有五种状态:
初始化
可运行
运行中
阻塞
销毁
线程:
进程中的一个执行任务(控制单元),负责当前进程中程序的执行。一个进程至少有一个线程,一个进程可以运行多个线程,多个线程可共享数据。一个进程的多个线程共享进程的堆和方法区资源,但每个线程有自己的程序计数器、虚拟机栈和本地方法栈,所以系统在产生一个线程,或是在各个线程之间作切换工作时,负担要比进程小得多,也正因为如此,线程也被称为轻量级进程。
区别:
-
进程是系统资源分配的最小单位,线程是CPU调度的最小单位
-
一个进程可以包含多条线程,而一个线程只能属于一个进程
-
创建进程消耗的资源要比创建线程消耗的资源大得多
-
进程的切换效率要比线程的切换效率低得多每个进程都有独立的代码和数据空间(程序上下文),程序之间的切换会有较大的开销;线程可以看做轻量级的进程,同一类线程共享代码和数据空间,每个线程都有自己独立的运行栈和程序计数器(PC),线程之间切换的开销小。
-
系统中每一个进程都是相互独立的存在,而同一个进程中所有的线程只有自己的栈区,其他空间都是共享的
-
进程之间的通讯必须借助于外部手段,而线程之间的通讯是直接通过共享空间来通讯的
7.一个进程崩溃后,在保护模式下不会对其他进程产生影响,但是一个线程崩溃整个进程都死掉。所以多进程要比多线程健壮。
8.每个独立的进程有程序运行的入口、顺序执行序列和程序出口。但是线程不能独立执行,必须依存在应用程序中,由应用程序提供多个线程执行控制,两者均可并发执行
协程:
协程是一种用户的轻量级线程。协程的调度由用户控制,拥有自己独立的寄存器上下文和栈。协程的切换效率比线程还要高!
协程,英文Coroutines,是一种比线程更加轻量级的存在。正如一个进程可以拥有多个线程一样,一个线程也可以拥有多个协程。
协程是由用户调度
协程比线程较安全
协程使用异步机制
管程:
管程,是用来管理进程的(监视器)。所谓的管程实际上是定义的一种数据结构和控制进程的一些操作的集合。
管程跟前面的进程线程、协程关系不大
管程就是代表共享资源的数据结构以及由对该共享数据结构实施操作的一组过程所组成的资源管理程序共同构成的一个操作系统的资源管理模块。管程被请求和释放临界资源的进程所调用。
管程定义了一个数据结构和能为并发进程所执行(在该数据结构上)的一组操作,这组操作能同步进程和改变管程中的数据。
既然协程这么好,它到底是怎么来使用的呢?
由于Java的原生语法中并没有实现协程(某些开源框架实现了协程,但是很少被使用)
协程的开销远远小于线程的开销。
参考了多个博文:
原文链接:https://blog.csdn.net/love10_1314/article/details/97282627
原文链接:https://blog.csdn.net/ThinkWon/article/details/102021274
原文链接:https://blog.csdn.net/qq_34746239/article/details/98120340