进程
进程(Process)
Windows任务管理器提供了有关计算机性能的信息,并显示了计算机上所运行的程序和进程的详细信息。
进程指的是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。进程是系统进行资源分配的基本单位,在支持线程的系统中,线程是调度运行的基本单位。进程实体中包含三个组成部分:
- 程序
- 数据
- 进程控制块(PCB, Process Control Block)
程序(program)与进程是有区别的,程序是静态的,进程是动态的。当系统装入程序并建立执行所需的状态和资源后,就创建了进程。进程可以认为是执行中的程序,进程需要一定资源(如CPU时间、内存、文件、I/O设备)完成任务。这些资源可以在创建的时候或者运行中分配。一个程序可以通过GUI(Graphical User Interface)图形用户界面的鼠标点击、CLI(Command-line Interface)命令行界面输入程序名等方式运行。
知识测验
内存管理
内存通常包括了栈区(stack)、堆区(heap)、数据区、程序代码区:
- 栈区:通常自动分配和释放,存放函数的参数值、局部变量的值等。
- 堆区:一般由程序员或运行时分配和释放,程序结束后由OS回收。
- 数据区:存放全局变量和静态变量,程序结束后由系统释放。
- 程序代码区:存放函数体的二进制代码。
进程状态模型
在两状态进程模型中,进程被分为运行态(running)和非运行态(not-running)。
并非所有进程只要是非运行态就一定处于就绪状态,有的需要阻塞等待I/O完成。因此非运行态又可分为就绪态(ready)和阻塞态(blocked)。
所有的进程从其创建到销毁都有各自的生命周期,进程要经过如下几个阶段:
- 创建状态:系统正在为其分配PCB和执行所需的上下文环境(context),这个时候的进程还无法被调度。
- 就绪状态:该进程已经具备执行条件,并等待CPU调度。
- 执行状态:进程已获得CPU资源,开始正常提供服务。
- 阻塞状态:进程需要等待I/O完成或其他事件,暂时无法继续执行;时间片用完则转入就绪状态,而不是阻塞状态。
- 终止状态:某一个进程达到了自然终止的状态,或者进行了强制性的停止,那么进程将进入到终止状态,进程将不再被执行。
进程的五态生命周期
解锁完整互动实验、进阶解析与精选参考答案。
知识测验
多进程
Python中在进行多进程开发的时候可以使用multiprocessing模块进行多进程的编写,这个模块提供有一个Process类,利用这个类可以进行多进程的定义。Python程序从主进程开始执行,通过Process创建的进程属于子进程。
创建多进程
import multiprocessing
def worker():
process = multiprocessing.current_process()
print(process.pid, process.name)
def main():
workers = [multiprocessing.Process(target=worker, name=f"Worker-{index}")
for index in range(3)]
for process in workers:
process.start()
for process in workers:
process.join()
if __name__ == "__main__":
main()psutil是一个进程管理的第三方模块,该模块可以跨平台(Linux、UNIX、macOS、Windows)地进行进程管理,可以极大地简化不同系统中的进程处理操作。
获取全部进程信息
import psutil
for process in psutil.process_iter(attrs=["pid", "name", "create_time"]):
try:
print(process.info)
except (psutil.NoSuchProcess, psutil.AccessDenied):
continue画出编辑器进程的生命周期
编辑器进程被创建后,依次经历下列事件。
- 画出五态模型,为故事中的每次转换标注原因。
- 解释抢占与等待文件读取为什么进入不同状态。
- 示意代码、数据、堆与栈,区分概念模型与固定物理布局。