Python -- 并发编程:基础知识

9.1 进程基础知识

  1. 程序是什么? -- 程序就是一堆文件.

  2. 进程是什么? -- 进程就是一个正在执行的文件/程序. 是资源单位 ( 抽象的概念 )

  3. 进程被谁执行? -- CPU最终运行程序 .

    操作系统调度作用,将磁盘上的程序加载到内存,然后交由CPU去处理.一个CPU正在运行的一个程序,就叫开启了一个进程

9.1.1 操作系统

  1. 操作系统的定义

    操作系统是存在于硬件与软件之间,管理,协调,控制软件与硬件的交互.

  2. 操作系统的作用(面试会问)

    1. 将一些复杂的硬件操作封装成接口,便于使用.
    2. 合理的调度分配多个进程与CPU的关系让其有序化

    如果没有操作系统,你去写一个程序,你只要完成两层即可.

    • 第一层: 你要学会底层硬件:cpu,内存,磁盘是如何工作使用的.
    • 第二层: 去调用这些底层的硬件.

9.1.2 操作系统的发展史(多道技术)

计算机:机械式计算机(算盘)

电子计算机:发展史

  1. 第一代计算机:1940-1955

    二战时期:推出电子计算机,手工操作,预约,类似于插线板的程序,进入机房,一个人使用.各种硬件的操作插线与你的程序结合.

    特点:没有操作系统的概念,所有的硬件连接都是自己完成

    优点:一个人使用

    缺点:一个人使用浪费资源 , 所有的程序都是串行处理

  2. 第二代电子计算机:磁带存储--批处理系统 1955-1965

    不需要程序员本人继续硬件的操作,所有的硬件的操作都已经是成型的机器

    每个程序员将自己的程序刻在磁盘上,就可以走了,中间有工作人员将你的代码磁盘运行,最后打印结果.

    优点:节省了程序员连接各个硬件的操作的时间

    缺点:不能独自使用计算机,不能在程序运行时修复bug.CPU还是串行处理

  3. 第三代计算机,集成电路,多道程序系统.

    集成电路概念,所有的硬件变的很小,排列在线路板上.

    20世纪60年代初: 计算机两条生产线:互不兼容

    1. 用于科学计算,运算的 计算密集型.

    2. 用户商用保险银行,归档,打印等工作. IO 密集型.

      阻塞; IO阻塞,recv, accept, read input,write, sleep等等,都是阻塞.

    system/360系列: 将两种计算机类型合并成一个.

第三代计算机解决的两个问题:

  1. 人工中途参与磁盘传递工作,以及输入输出设备不同机的问题

  2. 多道技术

    多道技术中的多道指的是多个程序,多道技术的实现是为了解决多个程序竞争或者说共享同一个资源(比如CPU)的有序调度问题,解决方式即多路复用,多路复用分为时间上的复用和空间上的复用。

     # 多道技术产生的技术背景
    CPU在执行一个任务的过程中,若需要操作硬盘,则发送操作硬盘的指令,指令一旦发出,硬盘上的机械手臂滑动读取数据到内存中,这一段时间,CPU需要等待,时间可能很短,但对于CPU来说已经很长很长,长到可以让CPU做很多其他的任务,如果我们让CPU在这段时间内切换到去做其他的任务,这样CPU不就充分利用了吗。

多道技术解决的两个问题:

  1. 时间上的复用:

    当一个程序在等待I/O时,另一个程序可以使用CPU,如果内存中可以同时存放足够多的作业,则CPU的利用率可以接近100%,类似于我们小学数学所学的统筹方法 ( 操作系统采用了多道技术后,可以控制进程的切换,或者说进程之间去争抢CPU的执行权限。这种切换不仅会在一个进程遇到 IO 时进行,一个进程占用CPU时间过长也会切换,或者说被操作系统夺走CPU的执行权限)

  2. 空间上的复用

    第一代,二代计算机一个内存只允许加载一个进程.

    第三代计算机开始,多道技术解决了提高内存的利用率:空间上的复用 -- 一个内存可以加载多个进程

    空间上的复用: 当年面临着一个问题,数据隔离.

    麻省理工(MIT)在一台改装过的7094机上开发成功的,CTSS兼容分时系统.

    一个问题: 还是不能独享

9.1.3 进程介绍

  1. 进程与程序的区别

    程序就是一堆文件.

    进程就是一个正在执行的文件/程序

  2. 几个概念:(面试会问)

    串行:所有的进程由CPU一个一个的解决

    并发:单个CPU同时执行多个进程(来回切换),看起来像同时运行

    并行:多个CPU真正同时运行多个进程

    阻塞:遇到 IO 才叫阻塞

    非阻塞: 没有 IO

  3. 进程的创建

    什么是开启多个进程? -- socket: server , client 两个进程

    Python中如果想一次开启多个进程,必须是一个主进程,开启多个子进程

    开启进程经历的过程:内存中开辟一个空间,加载资源与数据,调用CPU执行,可能还会使用这个空间的资源

    Linux , Windows: 由主进程开启子进程

    相同点:原则:主进程开启子进程,两个进程都有相互隔离的独立的空间,互不影响

    不同点:

    ​ Linux: 子进程空间的初始数据完全是从主(父)进程copy一份.

    ​ Windows: 子进程空间的初始数据完全是从主(父)进程copy一份,但是有所不同.

猜你喜欢

转载自www.cnblogs.com/Agoni-7/p/11247173.html