进程调度

python之路——进程

流过昼夜 提交于 2019-11-29 21:33:31
阅读目录 理论知识 操作系统背景知识 什么是进程 进程调度 进程的并发与并行 同步\异步\阻塞\非阻塞 进程的创建与结束 在python程序中的进程操作 multiprocess模块 进程的创建和multiprocess.Process 进程同步控制 —— 锁 进程间通信 —— 队列 进程间的数据共享 —— multiprocess.Manager 进程池和multiprocess.Pool 回到顶部 理论知识 操作系统背景知识 回到顶部 顾名思义,进程即正在执行的一个过程。进程是对正在运行程序的一个抽象。 进程的概念起源于操作系统,是操作系统最核心的概念,也是操作系统提供的最古老也是最重要的抽象概念之一。操作系统的其他所有内容都是围绕进程的概念展开的。 所以想要真正了解进程,必须事先了解操作系统, 点击进入 PS:即使可以利用的cpu只有一个(早期的计算机确实如此),也能保证支持(伪)并发的能力。将一个单独的cpu变成多个虚拟的cpu(多道技术:时间多路复用和空间多路复用+硬件上支持隔离),没有进程的抽象,现代计算机将不复存在。 必备的理论基础: #一 操作系统的作用: 1:隐藏丑陋复杂的硬件接口,提供良好的抽象接口 2:管理、调度进程,并且将多个进程对硬件的竞争变得有序 #二 多道技术: 1.产生背景:针对单核,实现并发 ps: 现在的主机一般是多核,那么每个核都会利用多道技术

python之路——线程

狂风中的少年 提交于 2019-11-29 21:33:11
简介 操作系统线程理论 线程概念的引入背景 线程的特点 进程和线程的关系 使用线程的实际场景 用户级线程和内核级线程(了解) 线程和python 理论知识 线程的创建Threading.Thread类 锁 队列 Python标准模块--concurrent.futures 回到顶部 操作系统线程理论 回到顶部 线程概念的引入背景 进程   之前我们已经了解了操作系统中进程的概念,程序并不能单独运行,只有将程序装载到内存中,系统为它分配资源才能运行,而这种执行的程序就称之为进程。程序和进程的区别就在于:程序是指令的集合,它是进程运行的静态描述文本;进程是程序的一次执行活动,属于动态概念。在多道编程中,我们允许多个程序同时加载到内存中,在操作系统的调度下,可以实现并发地执行。这是这样的设计,大大提高了CPU的利用率。进程的出现让每个用户感觉到自己独享CPU,因此,进程就是为了在CPU上实现多道编程而提出的。 有了进程为什么要有线程   进程有很多优点,它提供了多道编程,让我们感觉我们每个人都拥有自己的CPU和其他资源,可以提高计算机的利用率。很多人就不理解了,既然进程这么优秀,为什么还要线程呢?其实,仔细观察就会发现进程还是有很多缺陷的,主要体现在两点上: 进程只能在一个时间干一件事,如果想同时干两件事或多件事,进程就无能为力了。 进程在执行的过程中如果阻塞,例如等待输入

一文读懂什么是进程、线程、协程

隐身守侯 提交于 2019-11-29 19:11:59
目录 进程 线程 任务调度 进程与线程的区别 多线程与多核 一对一模型 多对一模型 多对多模型 查看进程与线程 线程的生命周期 协程 协程的目的 协程的特点 协程的原理 协程和线程的比较 进程   我们都知道计算机的核心是CPU,它承担了所有的计算任务;而操作系统是计算机的管理者,它负责任务的调度、资源的分配和管理,统领整个计算机硬件;应用程序则是具有某种功能的程序,程序是运行于操作系统之上的。   进程是一个具有一定独立功能的程序在一个数据集上的一次动态执行的过程,是操作系统进行资源分配和调度的一个独立单位,是应用程序运行的载体。进程是一种抽象的概念,从来没有统一的标准定义。 进程一般由程序、数据集合和进程控制块三部分组成。 程序用于描述进程要完成的功能,是控制进程执行的指令集; 数据集合是程序在执行时所需要的数据和工作区; 程序控制块(Program Control Block,简称PCB),包含进程的描述信息和控制信息,是进程存在的唯一标志。 进程具有的特征: 动态性:进程是程序的一次执行过程,是临时的,有生命期的,是动态产生,动态消亡的; 并发性:任何进程都可以同其他进程一起并发执行; 独立性:进程是系统进行资源分配和调度的一个独立单位; 结构性:进程由程序、数据和进程控制块三部分组成。 线程   在早期的操作系统中并没有线程的概念,进程是能拥有资源和独立运行的最小单位

第十二章 Java内存模型与线程

▼魔方 西西 提交于 2019-11-29 19:11:47
概述 并发应用场景:①充分利用计算机处理器的能力;②一个服务端同时为多个客户端提供服务。 衡量一个服务性能的高低好坏,每秒事务处理数是最重要的指标之一。 硬件的效率与一致性 Java内存模型 主内存和工作内存 ①Java内存模型的主要目标是定义程序中各个变量的访问规则 – 虚拟机中将变量存储到内存和从内存中取出变量这样的底层细节。此处的变量(Variables)包括了实例字段、静态字段和构成数组对象的元素,但不包括局部变量与方法参数,因为后者是线程私有的,不会被共享,自然就不会存在竞争问题。 ②Java内存模型并没有限制执行引擎使用处理器的特定寄存器或缓存来和主内存进行交互,也没有限制即时编译器进行调整代码执行顺序这类优化措施。 ③Java内存模型规定了所有的变量都存储在主内存(Main Memory,类比物理内存)。每条线程还有自己的工作内存(Working Memory,类比处理器高速缓存),线程的工作内存中保存了被该线程使用到的变量的主内存副本拷贝。线程对变量的所有操作(读取、赋值等)都必须在工作内存中进行,而不能直接读写主内存中的变量。不同的线程之间也无法直接访问对方工作内存中的变量,线程间变量值的传递均需要通过主内存来完成,线程、主内存、工作内存三者的交互关系如图所示。 内存间相互操作 一个变量如何从主内存拷贝到工作内存、如何从工作内存同步回主内存之类的实现细节

【操作系统】基础知识整理 & 常见面试题

最后都变了- 提交于 2019-11-29 19:06:45
操作系统 1 操作系统概述 操作系统的四个特性 操作系统的五大功能 2 进程 进程的定义 进程的状态 进程的特性 进程的同步、互斥和通信 a 竞争关系 和 进程互斥 b 协作关系 和 进程同步 c 进程通信 3 线程 线程的定义 线程的性质 线程通信 线程同步和互斥 线程机制的优点: 4 进程 VS. 线程 进程与线程之间的关系 进程与线程之间的区别 多进程与多线程之间的区别 5 处理机调度 用户态和核心态 处理机调度的层次 操作系统的常见进程调度算法 6 存储器管理 7 虚拟存储器 定义 特征 实现方法 页面置换算法(服务于分页请求系统) 常见面试题 1 操作系统概述   操作系统是管理和控制计算机系统中各种硬件和软件资源、合理地组织计算机工作流程的系统软件,是用户与计算机之间的接口。 操作系统的四个特性 并发 :同一段时间内多个程序执行(注意区别并行和并发,前者是同一时刻的多个事件,后者是同一时间段内的多个事件); 共享 :系统中的资源可以被内存中多个并发执行的进线程共同使用; 虚拟 :通过时分复用(如分时系统)以及空分复用(如虚拟内存)技术实现把一个物理实体虚拟为多个; 异步 :系统中的进程是以走走停停的方式执行的,且以一种不可预知的速度推进。   操作系统最基本的特征是并发和共享,两者互为存在条件。 操作系统的五大功能 处理机管理 :处理机分配都是以进程为单位

美团后台开发工程师一面知识点总结

时间秒杀一切 提交于 2019-11-29 14:43:00
正向代理和反向代理的区别? 正向代理和反向代理的本质都是代为收发请求和响应。 正向代理是一个位于客户端和目标服务器之间的代理服务器。为了从原始服务器取得内容,客户端向代理服务器发送一个请求,并且指定目标服务器,之后代理向目标服务器转交并且将获得的内容返回给客户端。 正向代理的情况下客户端必须要进行一些特别的设置才能使用。 反向代理正好相反。 对于客户端来说,反向代理就好像目标服务器,并且客户端不需要进行任何设置。 客户端向反向代理发送请求,接着反向代理判断请求走向何处,并将请求转交给客户端,使得这些内容就好似他自己一样,因此客户端并不会感知到反向代理后面的服务,也不需要客户端做任何设置,只需要把反向代理服务器当成真正的服务器就好了。 正向代理隐藏了客户端。(访问谷歌的梯子) 反向代理隐藏了服务器。(负载均衡,访问内网服务器) 参考资料: 反向代理为何叫反向代理? 进程,线程,协程? 进程 进程指一个正在执行的程序,是系统资源分配的最小单位,一个进程一般由以下几部分组成: 程序代码(称为文本段或者代码段) 当前的活动(包括程序计数器,寄存器的内容) 数据段(包括全局变量) 栈(包括函数参数,返回地址和局部变量等临时参数) 堆(进程运行期间动态分配的内存) 进程的特点: 动态性:进程由创建而产生,由调度而执行,因得不到资源而暂停执行,由撤销而消亡。 并发性

进程调度

别说谁变了你拦得住时间么 提交于 2019-11-29 12:04:38
进程调度 要想多个进程交替运行,操作系统必须对这些进程进行调度,这个调度也不是随即进行的,而是需要遵循一定的法则,由此就有了进程的调度算法。 一、先来先服务调度算法 先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。由此可知,本算法适合于CPU繁忙型作业,而不利于I/O繁忙型的作业(进程)。 二、短作业优先调度算法 短作业(进程)优先调度算法(SJ/PF)是指对短作业或短进程优先调度的算法,该算法既可用于作业调度,也可用于进程调度。但其对长作业不利;不能保证紧迫性作业(进程)被及时处理;作业的长短只是被估算出来的。 三、时间片轮转法 显然,轮转法只能用来调度分配一些可以抢占的资源。这些可以抢占的资源可以随时被剥夺,而且可以将它们再分配给别的进程。CPU是可抢占资源的一种。但打印机等资源是不可抢占的。由于作业调度是对除了CPU之外的所有系统硬件资源的分配,其中包含有不可抢占资源,所以作业调度不使用轮转法。 在轮转法中,时间片长度的选取非常重要。首先,时间片长度的选择会直接影响到系统的开销和响应时间。如果时间片长度过短,则调度程序抢占处理机的次数增多。这将使进程上下文切换次数也大大增加,从而加重系统开销。反过来,如果时间片长度选择过长,例如

计算机操作系统第三章处理机调度与死锁习题及答案

老子叫甜甜 提交于 2019-11-29 07:28:12
进程调度的因素 引起进程调度的原因有:进程结束;时间片用完;被抢占;调用原语被阻塞;I/O请求 某进程被唤醒后立即进入运行,我们就说这个系统采用的是抢占调度方法,对吗?为什么? 不对,抢占调度方法定义:允许调度程序根据某种原则,将已分配给该进程的处理机,重新分配给另一进程,由题不能判断CPU是否处于空闲状态 高级调度和低级调度的主要任务是什么?为什么引入中级调度? (1)高级调度又称为作业调度。它是批处理系统中使用的一种调度。主要任务是按照某种算法从外存的后备队列上选择一个或多个作业调入内存,并为其创建进程、分配必要的资源,然后再将所创建的进程控制块插入就绪队列中 (2)低级调度又称进程调度。它是距离硬件最近的一级调度。其主要任务是按照某种算法从就绪队列上选择一个(或多个)进程,使其获得CPU (3)引入中级调度的目的是为了提高内存利用率和系统吞吐量。其功能是,让那些暂时不能运行的进程不再占用宝贵的内存资源,而是调其到外存上等候。此时的进程状态为挂起状态。当这些进程重新具备运行条件且内存空闲时,由中级调度选择一部分挂起状态的进程调入内存并将其状态变为就绪状态 何谓死锁?产生死锁的原因和必要条件是什么? 何谓死锁: 死锁是指多个进程在执行过程中,由于竞争资源或者由于彼此通信而造成的一种阻塞的现象,当进程处于这种状态时,若无外力作用,它们都将无法再向前推进。 产生死锁的原因: (1

进程线程模型

∥☆過路亽.° 提交于 2019-11-29 05:34:39
pthread_join 等待一个特定线程的退出 进程控制块分为调度信息和现场信息 进程标识符 进程当前状态 代码段指针 进程从运行——>就绪的原因可能是:1.被调度程序抢占处理机 2.进程完成创建 3.时间片用完 非抢占式能引起新的进程调度是:1.正在执行的进程运行完毕 正在执行的进程调用阻塞原语将自己阻塞进入等待状态3.正在执行的进程调用阻塞原语并因资源不足被阻塞 4.唤醒原语激活了资源进程 时间片用完 进程由:进程控制块 数据 指令代码组成 引入进程的原因:提高并发度 减少通信开销 线程之间的切换时间短 每个线程都有独有的栈 等待——>就绪 唤醒 当设备忙进程会进入等待状态 不会终止 运行中的三种状态:就绪 等待 运行 运行——>就绪 现场的信息都会保存到进程控制块当中 不同的进程执行的代码段可能相同 与本进程相关的内容只能由操作系统读取 当进程中请处理机得不到满足时 他将进入就绪态 管程只允许一个进程进入管理 从而实现进程的互斥 但无法保证其本身互斥 进程优先级:静态和动态 系统进程优先级高于用户进程优先级 静态优先级 进程创建时确定运行期间不会改变 动态优先级 创建时确定优先级 之后不断改变 所有进程必须调度才能在处理机上运行 没有被调度到的进程只能处于等待状态 操作系统可以根据不同情景分类应用多种进程调度算法 一个进程的状态变化不一定会引起令一个进程的状态变化

[Kubernetes]深入解析Pod

谁说胖子不能爱 提交于 2019-11-29 03:06:10
  Pod是Kubernetes项目的原子调度单位 为什么需要Pod?   容器是未来云计算系统中的进程,容器镜像就是这个系统里的".exe"安装包,那Kubernetes就是操作系统。   在一个真正的操作系统里,进程不是独自运行的,而是以进程组的方式组织在一起。对操作系统来说,进程组更方便管理,比如Linux只要将信号SIGKILL信号发送给一个进程组,那么该进程组中的所有进程都会收到这个信号而终止运行。   可以通过下面这个命令查看进程组,进程后面括号里的数字就是它的进程组ID(process group ID) $ pstree -g   这里有一个叫rsyslogd的程序,它负责的是Linux操作系统里的日志处理,由三个进程组成:一个imklog模块,一个imuxsock模块,一个rsyslogd自己的main函数主进程。这三个进程一定要运行在同一台机器上,否则它们之间基于Socket的通信和文件交换都会出现问题。   那现在如果把rsyslogd这个应用容器化,受限于容器的“单进程模型”(不是指容器里只能运行一个进程,而是指容器没有管理多个进程的能力),这三个模块必须被分别制作成是哪个不同的容器。在这个三个容器运行的时候,它们的设置的内存配额都是1GB。   假设现在kubernetes集群上有两个节点,node1上有3GB内存可用,node2上有2.5GB内存可用