笔记开始java
进程:就是一个程序运行起来的状态,进程是操做系统用来分配资源的基本单位,分配资源指的是独立的内存空间 linux
僵尸进程:当A进程fork(底层调的clone)了一个B进程,那么A叫作B的父进程,父进程当中会维护子进程的PCB结构,若是子进程已经退出,父进程没有释放子进程的pcb,那么这个子进程在系统当中看到的就是一个被defunct标记的僵尸进程,(僵尸进程只占pcb,影响不是太大,若是太多的话就有影响,僵尸进程的标记是defunct)segmentfault
孤儿进程:子进程还没退出,父进程先退出了,那么子进程就没有了父亲,这个时候系统会将这个子进程分配给父进程的父进程去管理(系统会交给一个特殊的进程去处理,没有太大影响,只是换了个爹)服务器
线程:是一个进程中不一样的执行路径,线程是操做系统进行执行调度的基本单位,线程调度执行(线程共享进程的内存空间,没有本身独立的内存空间)
线程在linux中的实现:就是一个普通的进程,只不过和其余进程共享资源(内存空间 全局数据等等);其余系统都有各自的LWP(Light Weight Process轻量级进程)的实现,高层面理解:一个进程中不一样的执行路线并发
纤程/协程(Fiber)(线程中的线程):jvm是运行在用户空间的,jvm的线程与操做系统的线程是一 一对应的,jvm新开一个线程须要经过系统调用,经过内核建立,而后再同步回用户态;而纤程是在jvm的一个线程里面分出来的分支,不须要跟操做系统内核打交道,也不会跟操做系统的线程一 一对应,切换快速,是在jvm层面调度的,用户态的线程,切换和调度不须要通过osjvm
优点:
一、占资源少,os线程须要1M,Fiber:4k, 二、切换比较简单,
三、启动不少个 目前支持内置纤程的语言:Kotlin,Scala,Go,Python(lib),java(没有内置、盼望内置)在类库(quasar-core)级别能够支持
应用场景:很短的计算任务,不须要和内核打交道,并发量高spa
内核线程:内核启动以后常常要作一些后台操做,这些由Kernel Thread来完成,只在内核空间运行,用户态不能访问操作系统
进程(任务)调度:内核进程调度器决定,该哪一个进程容许,什么时候运行,运行多长时间,这个过程叫作进程调度,linux下:每一个进程都有本身的调度方案,能够自定义,可是linux内核有许多内置的调度方案,不须要咱们本身写线程
能够多个进程运行,分抢占式和非抢占式,(如今呢大可能是抢占式,由进程调度器控制)协程
linux2.5采用O(1)调度策略,好比每一个进程分配10毫秒,偏向服务器,可是对交互不友好,好比有的进程比较着急,可是也须要排队等待一个10毫秒
linux2.6采用CFS(Completely Fair Scheduler)调度策略,按优先级分配时间片的比例,记录每一个进程的执行时间,若是有一个进程执行时间不到应该分配的比
实时进程(急诊)优先级分高低-FIFO(优先级高的先执行),优先级同样-RR(round robin);普通进程:CFS
硬中断:键盘、网卡、打印机等硬件进行的中断,中断处理机制的实现细节,好比: 一、键盘按下会产生一个中断信号传递给一个芯片(中断处理器),而后中断处理器告诉给cpu,二、cpu根据中断向量表找到固定的处理程序,三、而后这个处理程序将这个中断信号交给内核(kernel),四、内核找到中断处理程序开始处理,找到正在运行的程序当中正在等待键盘输入的程序,五、而后才是程序开始处理
软中断(十六进制的80中断):软件给的中断,系统调用的操做都会进行软中断,如今的硬件层面的支持有sysenter
上一篇:https://segmentfault.com/a/11...
下一篇:https://segmentfault.com/a/11...