进程: 正在运行的程序的实例 -> 进程是操作系统中支援分配的最小单位

所有的进程都是通过他的父进程创建的

进程与进程之间的数据是隔离的

当程序运行的时候操作系统会给该程序分配内存空间,且每个程序之间的内存空间是隔离的

进程是如何调度的(系统是如何执行程序的)

  • 先来先服务算法 -> FCFS
  • 短作业优先算法
  • 时间片轮转算法
  • 多级反馈算法

1. 进程的创建与结束

  • 进程的创建: 当用户双击打开一个软件的时候进程就会被创建,或者是系统自己启动的程序

  • 进程的结束: 
    • 正常退出 (自愿,如用户点击交互式页面的叉号,或程序执行完毕调用发起系统调用正常退出,在linux中用exit,在windows中用ExitProcess)
    • 出错退出 (自愿,python a.py中a.py不存在)
    • 严重错误 (非自愿,执行非法指令,如引用不存在的内存,1/0等,可以捕捉异常,try...except...)
    • 被其他进程杀死 (非自愿,如直接在任务管理器中直接结束)

2. 并行 与 并发

  • 并行: 并行是指两个程序同时执行,比如赛跑,两个人都在不停的往前跑(前提是内存够用的情况下)

    • 并行是从微观上,也就是在一个精确的时间片刻,有不同的程序在同时执行,这就要求必须有多个处理器。

  • 并发: 并发是指内存资源有限的情况下,两个程序交替使用内存资源(比如一段路(单核CPU资源)同时只能过一个人,A走一段后,让给B,B用完继续给A ,交替使用,目的是提高效率。)

    • 并发是从宏观上,在一个时间段上可以看出是同时执行的(但其实不是),比如一个服务器同时处理多个session。

3. 同步 异步 阻塞 非阻塞


  • 同步: 程序从上往下执行
  • 异步: 类似于js中的ajax,程序执行到 ajax 不会等到 ajax 返回数据,而是继续往下执行
  • 阻塞: 就是需要得到数据程序才会往下执行 -> 例如 input sk.accept sk.recv


  • 非阻塞: 就是字面意思

4. 同步/异步与阻塞/非阻塞

  • 同步阻塞形式: 程序从上往下执行遇到了阻塞
  • 异步阻塞形式: 程序中即遇到了异步也遇到了阻塞
  • 同步非阻塞: 程序从上往下执行没有遇到阻塞
  • 异步阻塞形式: 程序中即只遇到了异步没有遇到阻塞