进程 线程 纤程 中断

进程就是一个程序运行起来的状态,线程是一个进程中的不同的执行路径。

专业:进程是OS分配资源的基本单位,线程是执行调度的基本单位。分配资源最重要的是:进程独立的内存空间,线程调度执行(线程共享进程的内存空间,没有自己独立的内存空间)

下面这哥们对CPU组成说的很好。

https://blog.csdn.net/yaoji8151/article/details/106531671

线程:每个操作系统实现是不一样的,对于linux而言就是一个普通进程,只不过和其他进程共享资源(内存共享、全局数据等),linux 启动一个进程fork()方法,从现有的进程main里面克隆一个新的进程,就相当于是一个子进程。其他系统都有各自LWP(Light Weight Process轻量级进程),高层面,一个进程中的不同执行路径。

纤程(协程、Fiber):线程中的线程,在JVM的线程里面,JVM是跑在用户态的,操作系统OS是跑在内核态,JVM中每个线程都需要向操作系统申请,所以是“重”线程;

Fiber 在一个线程中在分出不同的分支,去并行执行,目前线程(目前来说10000个线程就卡不行了,CPU来回切片)而fiber是在用户空间,不需要跟硬件CPU打交道,在用户态的,所以切换特别快几万个几十万个都没问题。纤程和线程最大的区别是,它跑在用户空间,是用户空间里面的线程的,它不经过操作系统内核的,JVM自己管理自己切换。多个纤程对应1个线程。(用户态的线程,线程中的线程,切换和调度不需要经过OS,

优势:1. 占用资源很少OS:线程1M,纤程4K

           2. 切换比较简单

           3. 启动很多个10W+)

目前2020 3 22支持内置纤程的语言:Kotlin Scala Go Python(lib)... Java?jdk14不支持纤程 (open jdk : loom)jdk15可能会有。

应用场景:很短的计算任务,不需要和内核打交道,并发量高!

有人说go语言比java先进的地方,就在它支持纤程。

进程:linux中也称为task,是系统分配资源的基本单位;资源:独立的地址空间 内核数据结构(进程描述符..),全局变量 数据段;进程描述符:PCB(Process Control Block)

僵尸进程:ps -ef|grep defuct 父进程产生子进程后,会维护一个子进程的PCB结构,子进程退出,由父进程释放,如果父进程没有释放,那么子进程称为一个僵尸进程zombie。

孤儿进程:子进程结束之前,父进程已经退出,孤儿进程会称为init进程的孩子,由 进程进行维护 orphan。孤儿进程没啥影响,影响不大。

来不及写了,晚上继续写

原文地址:https://www.cnblogs.com/belen87/p/14166357.html