java 与操作系统底层交互_java程序员需要知道的底层知识(四)
笔记开始
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)调度策略
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
java 与操作系统底层交互_java程序员需要知道的底层知识(四)相关推荐
- Java需要掌握的底层知识_java程序员需要知道的底层知识(一)
首先给自己一个介绍,本人是一个蠢笨蠢笨的女程序员,由于有一天突然觉悟了,想在学习的过程中写一些笔记,以前一直不敢开始这个事情,因为我害怕写错了,误导了别人,现在还是害怕,如果真的误导了同行,你们也轻点 ...
- java run里面定义变量_Java程序员50多道最热门的多线程和并发面试题(答案解析)...
下面是Java程序员相关的热门面试题,你可以用它来好好准备面试. 1) 什么是线程? 线程是操作系统能够进行运算调度的最小单位,它被包含在进程之中,是进程中的实际运作单位.程序员可以通过它进行多处理器 ...
- 怎么访问和java包同级的文件_JAVA程序员谈几种访问文件的方式
读取和写入文件都需要I/O操作调用系统提供的接口,因为磁盘设备是由系统来管理的,我们的应用程序要想访问物理设备只能通过这个方式.但是系统调用都是会涉及到内核空间地址和用户名空间地址的切换问题,原因是操 ...
- java的xml面试题_Java程序员的10个XML面试问答
java的xml面试题 XML面试问题在各种编程工作面试中非常受欢迎,包括针对Web开发人员的Java面试 . XML是一项成熟的技术,通常用作从一个平台传输数据的标准. XML面试问题包含来自各种X ...
- Java业务面考什么_Java程序员面试技巧分享,面考官考查JAVA程序员常用的技术有哪些?...
想要成为合格的Java程序员或工程师到底需要具备哪些专业技能呢?面试者在面试之前到底需要准备哪些东西呢?本文陈列的这些内容既可以作为个人简历中的内容,也可以作为面试的时候跟面试官聊的东西. 大家可以把 ...
- java class文件常量池_JAVA程序员谈谈class文件结构中的常量池-class文件
常量的类型有12种 CONSTANT_Utf8_info1字面量UTF-8编码的字符串 CONSTANT_Integer_info3字面量整型字面量 CONSTANT_Float_info4字面量浮点 ...
- Java需要掌握的底层知识_Java程序员应该掌握的底层知识
缓存 缓存行: 缓存行越大,局部性空间效率越高,但读取时间慢 缓存行越小,局部性空间效率越低,但读取时间快 取一个折中值,目前多用: 64字节 public class CacheLinePaddin ...
- java技术栈有哪些_Java程序员必备的21个核心技术,你都掌握了哪些?
前言 经过这么多年的Java开发,以及结合平时面试Java开发者的一些经验,我觉得对于J2SE方面主要就是要掌握以下的一些内容. 1. JVM相关 对于刚刚接触Java的人来说,JVM相关的知识不一 ...
- java项目怎样提高性能_Java程序员成长之路(如何提高Java程序性能?)
1.尽量在合适的场合使用单例 使用单例可以减轻加载的负担,缩短加载的时间,提高加载的效率,但并不是所有地方都适用于单例,简单来说,单例主要适用于以下三个方面 第一,控制资源的使用,通过线程同步来控制资 ...
最新文章
- photoshop中把图片颜色变成透明
- mysql 主从配置(master slave)
- windows的定时任务设置
- 原子动作检测 A Better Baseline for AVA
- 101-字符串类string基础使用
- 浏览器兼容的JS写法总结
- 第九周 单片机的定时器与计数器 模式寄存器TMOD 控制寄存器TCON
- 如何解释静息态功能磁共振成像:询问你的参与者
- 项目验收测试是什么意思?项目检测具体流程有哪些?
- 【下载】DE2、DE2-70、DE1光盘资料
- 2.1 八边形绘制
- 陈艾盐:《春燕》百集访谈节目第六十三集
- 飞行棋 java_java版飞行棋
- 微信第三方平台授权流程说明
- ArcGIS Pro2.7 导入obj模型后贴图丢失问题
- SpaceVim图标及部分字符显示乱码
- 科学等于艺术,艺术等于科学
- 有些工具程序员不用也要掌握(想到就写,不定期更新)
- 照片变漫画头像如何操作?照片变漫画头像制作方法推荐
- ip网络对讲系统具有哪些特征