进程调度

Java并发67问

守給你的承諾、 提交于 2020-01-31 04:00:54
1. 并发和并行 2. 进程和线程 对于操作系统来说,一个任务就是一个进程(Process),比如打开一个浏览器就是启动一个浏览器进程,打开一个记事本就启动了一个记事本进程,打开两个记事本就启动了两个记事本进程,打开一个Word就启动了一个Word进程。 而在多个进程之间切换的时候,需要进行上下文切换。但是上下文切换势必会耗费一些资源。于是人们考虑,能不能在一个进程中增加一些“子任务”,这样减少上下文切换的成本。比如我们使用Word的时候,它可以同时进行打字、拼写检查、字数统计等,这些子任务之间共用同一个进程资源,但是他们之间的切换不需要进行上下文切换。 在一个进程内部,要同时干多件事,就需要同时运行多个“子任务”,我们把进程内的这些“子任务”称为线程。 随着时间的慢慢发展,人们进一步的切分了进程和线程之间的职责。 把进程当做资源分配的基本单元,把线程当做执行的基本单元,同一个进程的多个线程之间共享资源 3. 类变量,成员变量和局部变量 Java中共有三种变量,分别是类变量、成员变量和局部变量。他们分别存放在JVM的方法区、堆内存和栈内存中 public class Variables { /** * 类变量 */ private static int a ; /** * 成员变量 */ private int b ; /** * 局部变量 * @param c */ public

进程调度

怎甘沉沦 提交于 2020-01-30 23:56:02
创建新的进程   Linux系统中创建新进程使用fork()系统调用.所有进程都是通过复制进程0而得到的,都是进程0的子进程.   在创建新进程的过程中,系统首先在任务数组中找出一个还没有被任何进程使用的空项(空槽).如果系统已经有64个进程在运行,则fork()系统调用会因为任务数组表没有可用空项而错误返回.然后系统为新建进程在主内存区中申请一页内存来存放其任务数据结构信息,并复制当前任务数据结构中的所有内容作为新进程任务数据结构的模板.为了防止这个还未处理完成的新建进程被调度函数执行,此时应该立刻缉拿该新进程状态置为不可中断的睡眠状态.   随后对复制的任务数据结构进行修改.把当前进程设置为新进程的父进程,清楚信号位图并复位新进程各统计值,并设置初始运行时间片值为15个系统滴答数(150ms).解着根据当前进程设置任务状态段(TSS)中各寄存器的值.由于创建进程时新进程返回值应为0,所以需要设置tss.eax=0.新建进程内核堆栈指针tss.esp被设置成新进程任务数据结构所在内存页面的顶端,而堆栈段tss.ss0被设置成内核数据段选择符.tss.ldt被设置为局部表描述符在GDT中的索引值.如果当前进程使用了协处理器,则还需要把协处理器的完整状态保存到新进程的tss.i387结构中.   此后系设置新任务的代码和数据段基址,限长并复制当前进程内存分页管理的页表

Java内存模型与线程

假如想象 提交于 2020-01-29 07:32:02
Java内存模型与线程 每秒事务处理数(Transactions Per Second,TPS)、 Java语言和虚拟机提供了许多工具,把并发编程的门槛降低了不少。另外,各种中间件服务器、各类框架 12.2 硬件的效率与一致性 现代计算机系统都不得不加入一层读写速度尽可能接近处理器运算速度的高速缓存(Cache)来作为内存与处理器之间的缓冲: 为了解决一致性的问题,需要各个处理器访问缓存时都遵循一些协议,在读写时要根据协议来进行操作,这类协议有MSI、MESI(IllinoisProtocol)、MOSI、Synapse、Firefly及Dragon Protocol,等等 为了使得处理器内部的运算单元能尽量被充分利用,处理器可能会对输入代码进行乱序执行(Out-Of-Order Execution)优化,处理器会在计算之后将乱序执行的结果重组,保证该结果与顺序执行的结果是一致的,类似,Java虚拟机的即时编译器中也有类似的指令重排序(Instruction Reorder)优化。 12.3 Java内存模型 用来屏蔽掉各种硬件和操作系统的内存访问差异,以实现让Java程序在各种平台下都能达到一致的并发效果。 12.3.1 主内存与工作内存 此处的变量包括了实例字段、静态字段和构成数组对象的元素,但是不包括局部变量与方法参数,因为后者是线程私有的[插图],不会被共享

进程、线程、以及它们之间的区别与联系

我的未来我决定 提交于 2020-01-28 15:06:08
一、进程简介 1.1 进程概念的引入 计算机中,CPU是最宝贵的资源,为了提高CPU的利用率,引入了多道程序设计的概念。当内存中多个程序存在时,如果不对人们熟悉的“程序”的概念加以扩充,就无法刻画多个程序共同运行时系统呈现出的特征。 多道程序设计:是指允许多个作业(程序)同时进入计算机系统的内存并启动交替计算的方法。 也就是说,内存中多个相互独立的程序均处于开始和结束之间。 从宏观上看是并行的,多道程序都处于运行过程中,但尚未运行结束; 从微观角度上看是串行的,各道程序轮流的占用CPU交替的执行。 引入多道程序设计技术可以提高CPU的利用率,充分发挥计算机硬部件的并行性。 多道程序系统中,程序具有:并行、制约以及动态的特征。程序概念难以便是和反映系统中的情况,所以引入了进程这一概念。 1.2 程序是什么 说起进程,就不得不说下程序。先看定义:程序是指令和数据的有序集合,其本身没有任何运行的含义,是一个 静态 的概念。系统实际上是出于不断变化的状态中,程序不能反映这种动态性。 而进程则是在处理机上的一次执行过程,它是一个 动态 的概念。这个不难理解,其实进程是包含程序的,进程的执行离不开程序,进程中的文本区域就是代码区,也就是程序。 1.3 进程是什么 1.3.1 进程的概念 进程的定义: 进程是据有独立功能的程序在某个数据集合上的一次运行活动

操作系统-进程管理

我怕爱的太早我们不能终老 提交于 2020-01-28 02:11:18
进程管理 要点: 基础:进程描述及控制 策略:进程调度 实现:互斥与同步 避免:死锁与饥饿 解决:几个经典问题 进程的引入 程序的顺序执行 源代码程序,目标程序和可执行程序 程序执行:编辑,编译,链接,执行 程序的结构:顺序,分支,循环结构 程序执行的特征:顺序性,封闭性,可再现性 程序并发执行 多道程序设计技术:多个程序并发执行 程序并发执行时的特征:间断性,非封闭性,不可再现性 并发执行引发的问题: 协调各程序的执行顺序:输入数据还未全部输入内存时,计算必须等待 多个执行程序共享系统资源,程序之间可能会相互影响,甚至影响输出结果 选择那些,多少个程序进入内存执行 内存中的执行程序谁先执行,谁后执行 内存如何有效分配? 进程的概念 定义:可并发执行的程序,在一个数据集合上的运行过程 申请、拥有资源~调度(线程) 程序:静态概念,是指令和数据的集合,可长期存储 进程与程序对应关系 一个程序可以对应一个进程或者多个进程 一个进程可以对应一个程序,或者一段程序 进程的特征 动态性 并发性 独立性 异步性 引入进程带来的问题 增加了空间开销:为进程建立数据结构 额外的时间开销:管理和协调,跟踪,填写和更新有关数据结构,切换进程,保护现场 更难控制:协调多个进程竞争和共享资源如何预防;解决多个集成因为竞争资源而出现的故障 处理机的竞争尤为突出 进程的结构 组成(进程映像):程序,数据集合

进程调度

时间秒杀一切 提交于 2020-01-27 09:02:21
进程调度是一个内核子系统,负责决定将哪个进程投入运行,何时运行以及运行多长的时间。它是多任务操作系统的基础。 调度相关概念 多任务操作系统 I/O消耗性与处理器消耗性 优先级 处理器时间使用比 Linux调度算法 CFS调度算法 CFS调度算法的实现 时间记账 进程选择 调度器 休眠和唤醒 抢占 上下文切换 与调度相关的系统调用 调度相关概念 多任务操作系统 在单处理器机器上,会产生多个进程同时在运行的幻觉 在多处理器机器上,会使多个进程在不同的处理器上真正同时,并行的执行。 I/O消耗性与处理器消耗性 进程可以被分为: I/O消耗型:进程大部分时间用来提交I/O请求或者是等待I/O请求,这种进程运行时间短,经常处于阻塞状态,不需要太长的时间片(比如文字编辑程序) 处理器消耗型:进程大部分时间用在执行代码上,除非被强占,否则他们一直都在不停的运行,因为它们没有太多I/O需求,希望时间片越长越好(比如视频编码程序) Linux倾向于优先调度I/O消耗性 优先级 nice值:值越低,优先级越高 实时优先级:值越高,优先级越高 处理器时间使用比 linux的CFS调度器没有直接分配时间片到进程,它是将处理器的使用比划分给了进程。进程的nice值越小,分到的处理器时间使用比例越大。 CFS调度器和一般操作系统用的时间片+优先级的方式不同,进程的抢占时机取决于新的可以运行进程 消耗了

操作系统进程及其调度

你。 提交于 2020-01-27 03:26:54
进程调度 进程概念 进程特征 进程与程序区别 进程与线程区别 进程状态 三态 五态 进程控制块PCB 目标 概念 非抢占式 抢占式调度 周转时间 平均周转时间 带权周转时间 典型调度算法 先来先服务fcfs 描述 特点 短作业优先调度(SJF) 描述 特点 非抢占/抢占式式优先级调度算法 描述 响应比高者优点 描述 特点 时间片轮转调度(RR) 描述 特点 多级队列调度 描述 最短剩余时间优先算法(srtf) 描述 进程概念 行为规则为程序,程序在cpu执行的活动称为进程。 进程是独立可调度的活动。 进程是 可并发、独立功能的程序关于某数据集合的一次执行过程。 进程是操作系统资源分配和调度的基本单位。 进程特征 动态 独立 并发 异步 结构性 进程与程序区别 动态、静态 程序长期保存、进程有生命周期 进程是独立运行基本单位、程序为静态文本 进程程序无一一调度关系 程序是指令有序集合、进程有几段组成 进程与线程区别 进程 线程 资源拥有者、调度基本单位 进程的运行线 用户级线程:库来支持,CPU不可是被 内核级线程 混合方式 进程状态 三态 运行:等待事件就到阻塞状态、超时到就绪状态。 就绪:调度出运行状态。 阻塞:等待事件完成转为就绪状态 五态 新建 终止 进程控制块PCB 目标 避免死锁 避免饥饿 公平 吞吐量 … 概念 非抢占式 进程主动放弃CPU 抢占式调度

Spark学习之路 (七)Spark 运行流程[转]

点点圈 提交于 2020-01-26 18:07:06
Spark中的基本概念 (1)Application:表示你的应用程序 (2)Driver:表示main()函数,创建SparkContext。由SparkContext负责与ClusterManager通信,进行资源的申请,任务的分配和监控等。程序执行完毕后关闭SparkContext (3)Executor:某个Application运行在Worker节点上的一个进程,该进程负责运行某些task,并且负责将数据存在内存或者磁盘上。在Spark on Yarn模式下,其进程名称为 CoarseGrainedExecutor Backend,一个CoarseGrainedExecutor Backend进程有且仅有一个executor对象,它负责将Task包装成taskRunner,并从线程池中抽取出一个空闲线程运行Task,这样,每个CoarseGrainedExecutorBackend能并行运行Task的数据就取决于分配给它的CPU的个数。 (4)Worker:集群中可以运行Application代码的节点。在Standalone模式中指的是通过slave文件配置的worker节点,在Spark on Yarn模式中指的就是NodeManager节点。 (5)Task:在Executor进程中执行任务的工作单元,多个Task组成一个Stage (6)Job

操作系統-進程管理4(線程)

放肆的年华 提交于 2020-01-25 23:03:51
操作系统-进程管理(线程) 线程 线程的基本概念 线程是比进程更小的、能够独立运行的基本单位,线程比进程能更好地提高程序的并行执行速度,充分利用多处理机的优越性。引用线程主要是为了提高系统的处理效率,减少处理机的空转时间和进行调度时因保护CPU现场浪费的时间。 线程是 进程中执行运算的最小单位 ,即执行处理机调度的基本单位。在引入线程的操作系统中,可以在一个进程内部进行线程的切换。 进程是资源分配的基本单位,同一进程的所有线程共享该进程的所有资源。线程是分配处理机的基本单位,真正在处理机上运行的是线程。 Linux系统中没有区分进程和线程,它们都使用相同的描述方法,使用相同的调度和管理策略。 线程的状态与转换操作 线程只有三种基本状态: 执行、阻塞和就绪 。针对线程的三种状态,存在五种操作来转换线程的状态。 派生(Spawn) 线程在进程中派生出来,也可再派生线程。用户可以通过相关的系统调用来派生自己的线程。Linux系统中,库函数clonc()和create_thread()分别用来派生不同执行模式的线程。 一个新派生出的线程具有相应的数据结构指针和变量,这些指针和变量作为 寄存器上下文 放在本线程的寄存器和堆栈中。新派生出来的线程被放入就绪队列。 调度(Schedule) 选择一条就绪线程进入执行状态。 阻塞(Block) 如果一个线程在执行过程中需要等待某个事件发生,则被阻塞

【Spark】(六)Spark 运行流程

≡放荡痞女 提交于 2020-01-25 15:11:32
文章目录 一、Spark中的基本概念 二、Spark的运行流程 2.1 Spark的基本运行流程 1、说明 2、图解 3、Spark运行架构特点 4、DAGScheduler 5、TaskScheduler 6、SchedulerBackend 7、Executor 三、Spark在不同集群中的运行架构 3.1 Spark on Standalone运行过程 3.2 Spark on YARN运行过程 3.2.1 YARN框架流程 3.2.2 YARN-Client 3.2.3 YARN-Cluster 3.2.4 YARN-Client 与 YARN-Cluster 区别 一、Spark中的基本概念 (1)Application:表示你的应用程序 (2)Driver:表示main()函数,创建SparkContext。由SparkContext负责与ClusterManager通信,进行资源的申请,任务的分配和监控等。程序执行完毕后关闭SparkContext (3)Executor:某个Application运行在Worker节点上的一个进程,该进程负责运行某些task,并且负责将数据存在内存或者磁盘上。在Spark on Yarn模式下,其进程名称为 CoarseGrainedExecutor Backend,一个CoarseGrainedExecutor