进程和多任务

进程

英文:Process,程序的一次执行,每一个进程都有自己的地址空间

启动可执行文件时,操作系统创建 进程,将程序载入内存并运行

进程ID(PID)

进程ID,英语:process ID,缩写PID,是大多数操作系统的内核用于唯一 标识进程 的一个数值。

先创建的进程,其pid一定小,后创建的进程,其pid一定大

这一数值可以作为许多函数调用的参数,以使调整进程优先级、kill进程((杀死、结束进程))之类的进程控制行为成为可能。

Windows查看进程方式:

  1. 同时按下ctrl+alt+delete,弹出界面,点击“任务管理器”
  2. 在“任务栏”点击右键,点击“任务管理器”,如下图:

在“任务管理器”窗口中,点击“详细信息”,查看PID,如下图:

进程和程序的区别

  1. 程序是若干个文件,其内容是机器指令和数据;进程是正在运行的程序
  2. 程序是永久的;进程有生命周期,会结束

进程与程序的联系:

进程是程序的一次执行,进程总是对应至少一个程序,但一个程序可建立多个进程。

多任务

常见的操作系统(MS Windows、UNIX、Linux、Mac OS等)同时可以运行多个进程,称之为多任务。
在操作系统中,一个 任务 可以理解成一个 进程,也可以理解成一个 线程

如下图,我们一般在电脑中会同时打开多个软件

多任务是通过 多进程、多线程 实现的

单核CPU实现多任务原理

  1. 启动QQ,操作系统创建进程,将程序加载入内存并运行,如下图:

  2. 启动迅雷,操作系统创建进程,将程序加载入内存并运行,操作系统轮流让QQ、迅雷执行
    假设操作系统让迅雷执行20毫秒,如下图:

    然后让QQ执行20豪秒,如下图:

    然后再让迅雷执行20毫米,如此循环执行,称之为:时间片轮转调度
    表面是看CPU每次只执行一个任务,但是CPU调度执行速度非常快,导致感觉就像所有任务都在同时执行一样

相当于放电影:
这个过程就相当于放映电影胶片,每次只放映一格画面,每格画面放映1/24秒(即每秒24格画面),然后再放映下一格画面,由于速度非常快,就感觉在连续播放

总结:

  • 单核CPU永远 不可能 真正地同时运行多个任务
  • 多道:内存中有两道以上的程序,且这些程序所对应的进程在任一时刻都处于就绪、运行、等待三个状态之一;
  • 时间片轮转调度:操作系统把一段时间分成若干个时间片,每个任务每次只运行一个时间片,如此循环执行。
  • 宏观上并行:宏观上看,这些程序都正在执行;
  • 微观上串行:微观上看,这些程序所对应的进程在 交替 地执行,一个时刻只能有 一个 进程在CPU上执行

多核CPU实现多任务原理

真正的执行多任务只能在多核CPU(或多个CPU)上实现,如下图,假设双核CPU,当前操作系统只运行2个程序QQ和迅雷,那么一核运行QQ,一核运行迅雷,此时2个程序是真正的在同时运行

但是由于任务数量远远多于CPU的核心数量,所以,操作系统也会自动把很多任务轮流调度到每个核心上执行,与上面的单核CPU相同

串行

一个程序完完整整的运行完了,下个程序才运行

并行

真正一起执行,任务数小于等于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


原文出处:/show_1EF2kW6P0wMV.html