首页 > 系统相关 >多进程理论

多进程理论

时间:2024-05-28 16:45:42浏览次数:24  
标签:调用 理论 作业 阻塞 调度 算法 进程

【一】什么是进程

【1】进程概念

  • 正在进行的一个过程或者说一个任务
  • 而负责执行任务则是cpu
  • 进程其实就是一个正在运行的程序

【2】单任务

  • 单核+多道,实现多个进程的并发执行

  • 同一时刻只能做一个任务(cpu同一时间只能干一个活)

【3】多任务

  • 同一时刻可以做多个任务

【二】程序和进程的区别

  • 程序仅仅只是一堆代码而已
  • 而进程指的是程序的运行过程

【三】进程的调度问题

【1】先来先服务算法

  • 该算法既可用于作业调度,也可用于进程调度
  • FCFS算法比较有利于长作业,而不利于短作业
  • 由此可知,本算法适合于CPU繁忙型作业,而不利于I/O繁忙型的作业

【2】短作业优先调度算法

  • 短作业优先调度算法(SJ/PF)是指对短作业或短进程优先调度的算法

  • 该算法既可用于作业调度,也可用于进程调度

  • 但其对长作业不利,不能保证紧迫性作业被及时处理,作业的长短只是被估算出来的

【3】时间片轮转法

  • 时间片轮转法的基本思路是让每个进程在就绪队列中的等待时间与享受服务的时间成比例

  • 由于作业调度是对除了CPU之外的所有系统硬件资源的分配,其中包含有不可抢占资源,所以作业调度不使用轮转法

  • 在轮转法中,时间片长度的选取非常重要

  • 时间片长度的选择是根据系统对响应时间的要求和就绪队列中所允许最大的进程数来确定的

【4】多级反馈队列

  • 前面介绍的各种用作进程调度的算法都有一定的局限性

    • 如短进程优先的调度算法,仅照顾了短进程而忽略了长进程,而且如果并未指明进程的长度,则短进程优先和基于进程长度的抢占式调度算法都将无法使用
  • 而多级反馈队列调度算法则不必事先知道各种进程所需的执行时间,而且还可以满足各种类型进程的需要,因而它是目前被公认的一种较好的进程调度算法

  • 调度算法的实施过程:

    • 为多个就绪队列设置优先级
    • 新进程等待调用
    • 按顺序调度队列

【四】并发与并行

【1】并发

  • 是伪并行,即看起来是同时运行。
  • 单个cpu+多道技术就可以实现并发,并行也属于并发

【2】并行

  • 多个任务同时运行,只有具备多个cpu才能实现并行

【3】多道技术

  • 内存中同时存入多道(多个)程序
  • cpu从一个进程快速切换到另外一个
  • 使每个进程各自运行几十或几百毫秒
  • 这样,虽然在某一个瞬间
  • 一个cpu只能执行一个任务
  • 但在1秒内,cpu却可以运行多个进程
  • 这就给人产生了并行的错觉,即伪并发
  • 以此来区分多处理器操作系统的真正硬件并行(多个cpu共享同一个物理内存)

【4】总结

  • 并行肯定算并发
  • 单核的计算机肯定不能实现并行,但是可以实现并发。

【五】同步/异步&阻塞/非阻塞

【1】同步

  • 在进行一个程序执行之后,必须等待当前程序执行完成才能继续下一个任务

  • 所谓同步就是在发出一个功能调用时,在没有得到结果之前,该调用就不会返回

【2】异步

  • 在进行一个程序执行之后,没等待当前程序执行完成就能继续下一个任务

  • 异步就是当一个异步功能调用发出后,调用者不能立刻得到结果,当该异步功能完成后,通过状态、通知或回调来通知调用者

【3】阻塞

  • 阻塞调用是指调用结果返回之前,当前线程会被挂起(如遇到io操作)
  • 函数只有在得到结果之后才会将阻塞的线程激活

(1)同步调用

  • apply一个累计1亿次的任务,该调用会一直等待,直到任务返回结果为止,但并未阻塞住(即便是被抢走cpu的执行权限,那也是处于就绪态)

(2)阻塞调用

  • 当socket工作在阻塞模式的时候,如果没有数据的情况下调用recv函数,则当前线程就会被挂起,直到有数据为止

【4】非阻塞

  • 指在不能立刻得到结果之前也会立刻返回,同时该函数不会阻塞当前线程

【5】小结

(1)同步/异步

  • 同步与异步针对的是函数/任务的调用方式

  • 同步就是当一个进程发起一个函数(任务)调用的时候

    • 一直等到函数(任务)完成,而进程继续处于激活状态。
  • 而异步情况下是当一个进程发起一个函数(任务)调用的时候

    • 不会等函数返回,而是继续往下执行当,函数返回的时候通过状态、通知、事件等方式通知进程任务完成。

(2)阻塞/非阻塞

  • 阻塞与非阻塞针对的是进程或线程
  • 阻塞是当请求不能满足的时候就将进程挂起
  • 而非阻塞则不会阻塞当前进程

【六】进程的创建

  • 只要有操作系统,就有进程的概念,就需要有创建进程的方式

  • 需要有系统运行过程中创建或撤销进程的能力

  • 创建进程是指启动某一个应用程序,撤销进程是指杀死指定的应用程序

【1】通用系统创建新进程的4种形式

(1)系统初始化

  • 查看进程linux中用ps命令,windows中用任务管理器
  • 前台进程负责与用户交互,后台运行的进程与用户无关
  • 运行在后台并且只在需要时才唤醒的进程,称为守护进程

(2)进程中开启子进程

  • 一个进程在运行过程中开启了子进程

    • 如nginx开启多进程 ---> os.fork --> subprocess.Popen

(3)交互式请求

  • 用户的交互式请求,创建一个新进程(如用户双击暴风影音)

(4)批处理作业的初始化

  • 一个批处理作业的初始化,只在大型机的批处理系统中应用

【2】不同系统的新进程的创建方式

(1)UNIX

  • 在UNIX中该系统调用是:fork,fork会创建一个与父进程一模一样的副本
  • 二者有相同的存储映像、同样的环境字符串和同样的打开文件,在shell解释器进程中,执行一个命令就会创建一个子进程

(2)Windows

  • 在windows中该系统调用是:CreateProcess,CreateProcess既处理进程的创建,也负责把正确的程序装入新进程。

【七】进程的终止

【1】正常退出

  • 正常退出属于自愿退出程序,如程序执行完毕调用发起系统调用正常退出
  • 在 Linux 中用 exit,在 Windows 中用 ExitProcess

【2】出错退出

  • 出错退出也属于自愿退出程序,在程序执行过程中发生错误,导致程序退出。

【3】严重错误

  • 属于非自愿退出程序,执行非法指令,如引用不存在的内存,1/0等,可以捕捉异常
  • try…except…

【4】被其他进程杀死

  • 属于非自愿退出程序,如使用命令 kill -9 在 Linux 中强制终止进程。

【九】进程的状态

【1】什么是进程的状态

  • 进程状态反映进程执行过程的变化,这些状态随着进程的执行和外界条件的变化而转换。

【2】三态模型

  • 运行态:已经在使用过程中的状态

  • 就绪态:双击应用程序启动的过程中

  • 阻塞态:上传文件需要读取文件数据的过程

【3】五态模型

  • 新建态:双击应用程序启动的过程中 --- 双击 LOL图标
  • 终止态:应用程序已经准备好了 --- 进入到 LOL客户端
  • 运行态:应用程序正在执行 --- 正在打游戏
  • 就绪态:应用处于等待状态 --- 正在匹配队友
  • 阻塞态:应用程序结束 --- 主动将LOL退出

标签:调用,理论,作业,阻塞,调度,算法,进程
From: https://www.cnblogs.com/ligo6/p/18218352

相关文章

  • LLM 大模型学习必知必会系列(四):LLM训练理论篇以及Transformer结构模型详解
    LLM大模型学习必知必会系列(四):LLM训练理论篇以及Transformer结构模型详解1.模型/训练/推理知识介绍深度学习领域所谓的“模型”,是一个复杂的数学公式构成的计算步骤。为了便于理解,我们以一元一次方程为例子解释:y=ax+b该方程意味着给出常数a、b后,可以通过给出的x求出......
  • 进程A与B互传信号并做出反应
    进程A与B互传信号并做出反应练习:要求进程A创建一条消息队列之后向进程B发送SIGUSR1信号,进程B收到该信号之后打开消息队列并把进程的PID作为消息写入到消息队列中,要求进程B在写入消息之后,发SIGUSR2信号给进程A,进程A收到该信号则从消息队列中读取消息并输出消息正文的内容......
  • 系统编程练习题----使用消息队列实现两个进程之间的通信
    目录题目思路代码展示进程A进程B结果展示题目要求进程A创建一条消息队列之后向进程B发送SIGUSR1信号,进程B收到该信号之后打开消息队列并写入一段信息作为消息写入到消息队列中,要求进程B在写入消息之后,发SIGUSR2信号给进程A,进程A收到该信号则从消息队列中读取消息并输出消息正文......
  • 【Linux学习】进程间通信 (2) —— 信号
    下面是有关进程通信中信号的相关介绍,希望对你有所帮助!小海编程心语录-CSDN博客目录1.信号 1.1概念 1.2信号的产生 1.3信号的处理方式 2.函数 2.1kill()函数 2.2 signal()函数 2.3 sigaction()函数 2.4 sigprocmask()函数 2.5sigqueue()函数......
  • 《TCP/IP网络编程》(第十章)多进程服务器端(2)
    基于进程的并发服务器我们将扩展之前的回声服务器,使其可以同时向多个客户端体提供服务,实现模型如下图所示即每当有客户端向服务器请求服务时,服务器端都创建一个子进程为其提供服务,比如有5个客户端请求服务,则创建个5子进程。通过fork()复制的文件描述符下图是父进程调用......
  • 进程间通信(管道)、多线程理论、开设多线程的两种方式、threading介绍、线程之间共享数
    【一】进程间通信(管道)借助于消息队列,进程可以将消息放入队列中,然后由另一个进程从队列中取出。这种通信方式是非阻塞的,即发送进程不需要等待接收进程的响应即可继续执行。multiprocessing模块支持两种形式:队列和管道,这两种方式都是使用消息传递的进程间通信(IPC)有两种方式:队列......
  • 互斥锁、进程间通信(IPC)、队列(queue)模块、队列实现进程间通信、生产者和消费者模型
    【一】互斥锁【1】什么是进程同步(互斥锁)互斥锁(Mutex)是一种用于多线程编程中控制对共享资源访问的机制。其作用是保证在同一时刻只有一个线程在访问共享资源,从而避免多个线程同时读写数据造成的问题。互斥锁的基本原理是在对共享资源进行访问前加锁,使得其他线程无法访问该......
  • 僵尸进程和孤儿进程、守护进程
    【一】僵尸进程和孤儿进程【1】引入我们知道在unix/linux中,正常情况下,子进程是通过父进程创建的,子进程在创建新的进程。子进程的结束和父进程的运行是一个异步过程,即父进程永远无法预测子进程到底什么时候结束。当一个进程完成它的工作终止之后,它的父进程需要调用wait()或......
  • postgressq——四种进程间锁(4)
    进程间锁在PostgreSQL里有四种类型的进程间锁:Spinlocks:自旋锁,其保护的对象一般是数据库内部的一些数据结构,是一种轻量级的锁。LWLocks:轻量锁,也是主要用于保护数据库内部的一些数据结构,支持独占和共享两种模式。Regularlocks:又叫heavyweightlocks,也就是我们常说的表锁......
  • Java 进程 CPU 占用过高问题排查
    1.Java进程CPU占用过高问题排查1.1.运行环境1.2.定位CPU占用高的进程1.3.定位CPU占用高的线程1.4.将线程ID转换为十六进制1.5.找到线程对应的栈信息1.5.1.使用jstack1.5.2.使用jcmd1.5.3.使用arthas1.5.4.使用jattach1.Java进程CPU......