关于java:java程序员需要知道的底层知识四

5次阅读

共计 1589 个字符,预计需要花费 4 分钟才能阅读完成。

笔记开始

  1. 过程
    过程:就是一个程序运行起来的状态,过程是操作系统用来分配资源的根本单位,分配资源指的是独立的内存空间


    僵尸过程:当 A 过程 fork(底层调的 clone)了一个 B 过程,那么 A 叫做 B 的父过程,父过程当中会保护子过程的 PCB 构造,如果子过程曾经退出,父过程没有开释子过程的 pcb,那么这个子过程在零碎当中看到的就是一个被 defunct 标记的僵尸过程,(僵尸过程只占 pcb,影响不是太大,如果太多的话就有影响,僵尸过程的标记是 defunct)
    孤儿过程:子过程还没退出,父过程先退出了,那么子过程就没有了父亲,这个时候零碎会将这个子过程调配给父过程的父过程去治理(零碎会交给一个非凡的过程去解决,没有太大影响,只是换了个爹)
  2. 线程
    线程:是一个过程中不同的执行门路,线程是操作系统进行执行调度的根本单位,线程调度执行(线程共享过程的内存空间,没有本人独立的内存空间)
    线程在 linux 中的实现:就是一个一般的过程,只不过和其余过程共享资源(内存空间 全局数据等等);其余零碎都有各自的 LWP(Light Weight Process 轻量级过程)的实现,高层面了解:一个过程中不同的执行路线
  3. 纤程
    纤程 / 协程(Fiber)(线程中的线程):jvm 是运行在用户空间的,jvm 的线程与操作系统的线程是一 一对应的,jvm 新开一个线程须要通过零碎调用,通过内核创立,而后再同步回用户态;而纤程是在 jvm 的一个线程外面分进去的分支,不须要跟操作系统内核打交道,也不会跟操作系统的线程一 一对应,切换疾速,是在 jvm 层面调度的,用户态的线程,切换和调度不须要通过 os 劣势:
    1、占资源少,os 线程须要 1M,Fiber:4k,2、切换比较简单,
    3、启动很多个 目前反对内置纤程的语言:Kotlin,Scala,Go,Python(lib),java(没有内置、渴望内置)在类库(quasar-core)级别能够反对
    利用场景:很短的计算工作,不须要和内核打交道,并发量高
  4. 内核线程
    内核线程:内核启动之后常常要做一些后盾操作,这些由 Kernel Thread 来实现,只在内核空间运行,用户态不能拜访
  5. 过程调度
    过程(工作)调度:内核过程调度器决定,该哪个过程容许,何时运行,运行多长时间,这个过程叫做过程调度,linux 下:每个过程都有本人的调度计划,能够自定义,然而 linux 内核有许多内置的调度计划,不须要咱们本人写
    5-1. 单任务:一个操作系统下面只能干一件事儿

    5-2. 多任务:能够多个过程运行,分抢占式和非抢占式,(当初呢大多是抢占式,由过程调度器管制)

    5-3.
    linux2.5 采纳 O(1) 调度策略,比方每个过程调配 10 毫秒,偏差服务器,然而对交互不敌对,比方有的过程比拟焦急,然而也须要排队期待一个 10 毫秒
    linux2.6 采纳 CFS(Completely Fair Scheduler)调度策略,按优先级调配工夫片的比例,记录每个过程的执行工夫,如果有一个过程执行工夫不到应该调配的比

    5-4. 过程调度的基本概念

    5-5.linux 默认的调度策略:实时过程(急诊)优先级分高下 -FIFO(优先级高的先执行),优先级一样 -RR(round robin);一般过程:CFS

6. 中断:

硬中断:键盘、网卡、打印机等硬件进行的中断,中断解决机制的实现细节, 比方: 1、键盘按下会产生一个中断信号传递给一个芯片(中断处理器),而后中断处理器通知给 cpu,2、cpu 依据中断向量表找到固定的处理程序,3、而后这个处理程序将这个中断信号交给内核(kernel),4、内核找到中断处理程序开始解决,找到正在运行的程序当中正在期待键盘输入的程序,5、而后才是程序开始解决

软中断(十六进制的 80 中断):软件给的中断,零碎调用的操作都会进行软中断,当初的硬件层面的反对有 sysenter

上一篇:https://segmentfault.com/a/11…

正文完
 0