进程、线程
什么是流程?
我们开发和编写的代码称为程序,然后我们运行开发的代码。我们称之为过程。
了解: 当我们运行一个程序时,那么我们运行的程序就称为进程。
精简关键点
进程申请一块内存空间,并将数据放入该内存空间。申请数据的进程是最小的资源管理单元。
进程是线程的容器
程序和进程的区别
程序是数据和指令的集合。这是一个静态的概念。它是一堆可以长期保存在系统中的代码。
进程是运行程序的过程。这是一个动态的概念。进程是有生命周期的,也就是说当程序终止时进程就会被销毁,不会永久存在于系统中。
进程之间的交互
通过TCP/IP 端口在进程之间
什么是线程
线程是操作系统能够进行操作调度的最小单位。
它包含在流程中,是流程中的实际操作单元。
线程是指进程中的单个顺序控制流。一个进程中可以并发运行多个线程,每个线程并行执行不同的任务。
精简关键点
它是一个流程的装配线。仅用于执行程序,不涉及申请资源。它是程序实际执行器的最小执行单元。
线程之间的交互
多个线程共享相同的内存并通过共享内存空间进行交互。
进程和线程的关系
示例:
当我们打开一个聊天软件时,我们就启动了一个进程;当我们打开软件中的一些功能时,比如空间、扫描、设置……,这些操作都是线程,所以我们可以说“进程”包含“线程”,“线程”是“进程”的子集
进程是线程的容器
工厂装配线示例:
进程:指系统中正在运行的应用程序;程序一旦运行,就是一个进程;进程3354 的最小资源分配单位。
线程:系统分配处理器时间资源的基本单位,或者说是进程内独立执行的单位执行流程。线程—— 程序执行的最小单位。
进程需要分配很大一部分内存,而线程只需要分配一部分堆栈。
一个程序至少有一个进程,一个进程至少有一个线程。
一个线程可以创建和销毁另一个线程,同一进程中的多个线程可以并发执行。
并行、并发、串行
并发: 多个任务看似同时运行,这是一种假并行
在单核下使用多通道技术实现
: 同时并行多个任务
并行必须有多个核心才能实现,否则只能实现并发(伪并行)。
串行: 程序运行完毕后才运行下一个进程。
任务运行的三种状态
进程在运行过程中不断改变其运行状态。通常一个正在运行的进程必须具有三种状态: 就绪状态、运行状态和阻塞状态。
准备好
当进程分配完除CPU之外的所有必需资源后,只要再次获得CPU就可以执行程序。此时进程的状态称为就绪状态。
系统中可能有多个处于就绪状态的进程,它们通常被放在一个队列中,称为就绪队列。
跑步
当进程获得CPU操作权并且其程序处于运行状态时,称为运行状态。
在单核操作系统中,只有一个进程在运行,而在多核操作系统中,则有多个进程在运行。
阻塞(睡眠)
当正在执行的进程因等待事件而无法执行时,操作系统会剥夺CPU的运行时间。这是阻塞状态。
阻塞的原因有很多,比如:等待I/O操作、较高优先级的任务夺走CPU权限等。
进程三种状态之间的转换
当一个进程运行时,它会不断地从一种状态切换到另一种状态。它可以多次处于就绪状态和运行状态,也可以多次处于阻塞状态。下图是三种状态的转换图。
准备运行状态
对于处于就绪状态的进程,当进程调度器为其分配CPU时间片时,该进程就会从就绪状态转变为运行状态。
运行就绪状态
当一个处于运行态的进程运行时,由于分配的时间片已经用完,失去了CPU的使用权,运行态会再次转变为就绪态。
运行状态阻塞状态
正在运行的进程因为遇到I/O操作或者被更高优先级的任务抢走而无法继续执行,于是从运行状态转为阻塞状态。
阻塞就绪状态
一个处于阻塞状态的进程,如果它等待的事情已经处理完毕,那么该进程就从阻塞状态转入就绪状态。
两种提交任务的方式
同步
同步是指发送方发送数据并等待接收方发回响应后再发送下一个数据报的通信方法。
同步是指两个程序的运行是相关的。如果一个线程被阻塞并需要等待,则另一个线程将运行。
异步
异步是指发送方发送数据后,不等待接收方发回响应,就发送下一个数据报。
异步是指两个线程彼此无关,各自运行
例子
同步:
如果你约我去吃饭,我一听到就会立刻去和你一起吃饭。如果你没有听到我的声音,你就会一直打电话给我,直到我告诉你我听到了你的声音,然后我们就一起去吃饭。打电话就像同步。双方同时进行,不能重复。打电话给另一个人
异步:
你约我去吃饭,然后自己去吃饭。我可能收到消息后立即离开,也可能稍后离开。发送消息就像异步一样。向一个人发送消息后,我可能会向另一个人发送消息。
进程池
什么是进程池?
进程池是由资源进程和管理进程组成的技术应用。
为什么我们需要进程池?
在繁忙的时候,有成千上万的任务需要执行,而在空闲的时候,可能只有零星的任务。那么当需要执行数千个任务时,我们是否需要创建数千个进程呢?首先,创建进程需要时间,销毁进程也需要时间。其次,即使启动了数千个进程,操作系统也不能允许它们同时执行,这会影响程序的效率。因此,我们无法无限制地根据任务启动或结束流程。那么我们该怎么办?
进程池的概念
定义一个池并在其中放置固定数量的进程。当需求到来时,使用池中的进程来处理任务。
当处理完成后,并不关闭进程,而是将进程放回进程池中继续等待任务。
如果需要执行的任务较多,而池中的进程数不够,该任务就必须等待上一个进程完成任务后返回,获得空闲后才能继续执行过程。
换句话说,池中的进程数量是固定的,因此最多可以有固定数量的进程同时运行。
这样不会增加操作系统调度的难度,节省了切换进程的时间,并在一定程度上达到了并发的效果。
资源进程
对于预先创建的空闲进程,管理进程(例如池)会将工作分配给空闲进程进行处理。
管理流程
管理进程负责创建资源进程、将工作移交给空闲资源进程以及回收已完成工作的资源进程。
资源过程与管理过程的交互
管理流程如何有效管理资源流程并为资源流程分配任务?通过IPC、信号、信号量、消息队列、管道等进行交互。
审稿人:李茜