进程
英文:Process,程序的一次执行,每一个进程都有自己的地址空间
启动可执行文件时,操作系统创建 进程,将程序载入内存并运行
进程ID(PID)
进程ID,英语:process ID,缩写PID,是大多数操作系统的内核用于唯一 标识进程 的一个数值。
这一数值可以作为许多函数调用的参数,以使调整进程优先级、kill进程((杀死、结束进程))之类的进程控制行为成为可能。
Windows查看进程方式:
在“任务管理器”窗口中,点击“详细信息”,查看PID,如下图:
进程和程序的区别
- 程序是若干个文件,其内容是机器指令和数据;进程是正在运行的程序
- 程序是永久的;进程有生命周期,会结束
进程与程序的联系:
进程是程序的一次执行,进程总是对应至少一个程序,但一个程序可建立多个进程。
多任务
常见的操作系统(MS Windows、UNIX、Linux、Mac OS等)同时可以运行多个进程,称之为多任务。
在操作系统中,一个 任务 可以理解成一个 进程,也可以理解成一个 线程
多任务是通过 多进程、多线程 实现的
单核CPU实现多任务原理
启动迅雷,操作系统创建进程,将程序加载入内存并运行,操作系统轮流让QQ、迅雷执行
假设操作系统让迅雷执行20毫秒,如下图:
然后让QQ执行20豪秒,如下图:
然后再让迅雷执行20毫米,如此循环执行,称之为:时间片轮转调度
表面是看CPU每次只执行一个任务,但是CPU调度执行速度非常快,导致感觉就像所有任务都在同时执行一样
相当于放电影:
这个过程就相当于放映电影胶片,每次只放映一格画面,每格画面放映1/24秒(即每秒24格画面),然后再放映下一格画面,由于速度非常快,就感觉在连续播放
总结:
- 单核CPU永远 不可能 真正地同时运行多个任务
- 多道:内存中有两道以上的程序,且这些程序所对应的进程在任一时刻都处于就绪、运行、等待三个状态之一;
- 时间片轮转调度:操作系统把一段时间分成若干个时间片,每个任务每次只运行一个时间片,如此循环执行。
- 宏观上并行:宏观上看,这些程序都正在执行;
- 微观上串行:微观上看,这些程序所对应的进程在 交替 地执行,一个时刻只能有 一个 进程在CPU上执行
多核CPU实现多任务原理
真正的执行多任务只能在多核CPU(或多个CPU)上实现,如下图,假设双核CPU,当前操作系统只运行2个程序QQ和迅雷,那么一核运行QQ,一核运行迅雷,此时2个程序是真正的在同时运行
但是由于任务数量远远多于CPU的核心数量,所以,操作系统也会自动把很多任务轮流调度到每个核心上执行,与上面的单核CPU相同
串行
并行
并发
实现多任务的方式:
- 多进程模式
- 多线程模式
- 多进程+多线程模式
- 协程模式 (仅python)
一个进程创建多个子进程
如下图,启动谷歌浏览器时,会发现有多个进程,是为了提高效率,实现同时执行多任务,实现方式是 一个进程创建了多个进程
像这种,一个进程 可以创建 多个进程,前者称之为 父进程,后者称之为 子进程
子进程的pid一定比父进程的pid大
关于进程的概念
主进程
程序执行的入口,可以理解为C/C++的main()函数,JAVA的main()静态方法父进程
对于子进程而言, 子进程的创造者,可有多个子进程。 任何进程都有父进程,追根溯源是系统启动程序。对于我们一般写的程序,主进程是最初始的父进程。子进程
父进程创建的进程就是子进程, 子进程只能对应一个父进程。守护进程
是子进程的一种状态(daemon 进程)标记子进程与父进程同死。如果没有标记daemon , 则杀死父进程,与子进程的运行状态没有半分影响。孤儿进程
在unix、linux系统中会遇到,windows不会遇到。
父进程退出,而它的一个或多个子进程还在运行,那么这些子进程将成为孤儿进程。
在unix、linux、MacOS系统中,孤儿进程将被init进程(进程号为1)所收养,并由init进程对它们完成状态收集工作。僵尸进程
在unix、linux系统中会遇到,windows不会遇到。
一个进程使用fork创建子进程,如果子进程退出,并没有马上就消失掉,而是留下一个称为僵尸进程(Zombie)的数据结构,等待父进程处理,如果父进程并没有处理,那么子进程的进程描述符仍然保存在系统中。这种进程称之为僵死进程。
总结
多任务系统的特点:
- 多道:内存中有两道以上的程序,且这些程序所对应的进程在任一时刻都处于就绪、运行、等待三个状态之一;
- 宏观上并行:宏观上看,这些程序都正在执行;
- 微观上串行:微观上看,这些程序所对应的诸进程正在交替地执行,因为任何一个时刻只能有一个进程在处理机(CPU)上执行的
感谢文章:
https://blog.csdn.net/qq_41637554/article/details/80305061
启动可执行文件过程:
https://www.cnblogs.com/yzjustc/p/yzj.html
https://www.jianshu.com/p/7e0f9142512a








