python网络进阶

并发编程

操作系统的历史

# 手工操作 —— 穿孔卡片
    # 程序员将对应于程序和数据的已穿孔的纸带(或卡片)装入输入机,然后启动输入机把程序和数据输入计算机内存,接着通过控制台开关启动程序针对数据运行;计算完毕,打印机输出计算结果;用户取走结果并卸下纸带(或卡片)后,才让下一个用户上机。
    # 手工操作方式两个特点:
    # (1)用户独占全机。不会出现因资源已被其他用户占用而等待的现象,但资源的利用率低。
    # (2)CPU 等待手工操作。CPU的利用不充分。
    # 20世纪50年代后期,出现人机矛盾:手工操作的慢速度和计算机的高速度之间形成了尖锐矛盾,手工操作方式已严重损害了系统资源的利用率(使资源利用率降为百分之几,甚至更低),不能容忍。唯一的解决办法:只有摆脱人的手工操作,实现作业的自动过渡。这样就出现了成批处理。
# 批处理 —— 磁带存储
    # 批处理系统:加载在计算机上的一个系统软件,在它的控制下,计算机能够自动地、成批地处理一个或多个用户的作业(这作业包括程序、数据和命令)。
    # 联机批处理系统:主机与输入机之间增加一个存储设备——磁带,在运行于主机上的监督程序的自动控制下,计算机可自动完成:成批地把输入机上的用户作业读入磁带,依次把磁带上的用户作业读入主机内存并执行并把计算结果向输出机输出。完成了上一批作业后,监督程序又从输入机上输入另一批作业,保存在磁带上,并按上述步骤重复处理。
        # 监督程序不停地处理各个作业,从而实现了作业到作业的自动转接,减少了作业建立时间和手工操作时间,有效克服了人机矛盾,提高了计算机的利用率。
        # 但是,在作业输入和结果输出时,主机的高速CPU仍处于空闲状态,等待慢速的输入/输出设备完成工作: 主机处于“忙等”状态。
    # 脱机批处理系统:为克服与缓解:高速主机与慢速外设的矛盾,提高CPU的利用率,又引入了脱机批处理系统,即输入/输出脱离主机控制。
        # 卫星机:一台不与主机直接相连而专门用于与输入/输出设备打交道的。
        # 其功能是:
            # (1)从输入机上读取用户作业并放到输入磁带上。
            # (2)从输出磁带上读取执行结果并传给输出机。
            # 这样,主机不是直接与慢速的输入/输出设备打交道,而是与速度相对较快的磁带机发生关系,有效缓解了主机与设备的矛盾。主机与卫星机可并行工作,二者分工明确,可以充分发挥主机的高速计算能力。
        # 脱机批处理系统:20世纪60年代应用十分广泛,它极大缓解了人机矛盾及主机与外设的矛盾。
        # 不足:每次主机内存中仅存放一道作业,每当它运行期间发出输入/输出(I/O)请求后,高速的CPU便处于等待低速的I/O完成状态,致使CPU空闲。
        # 为改善CPU的利用率,又引入了多道程序系统。
    # 多道程序系统
        # 多道程序设计技术
        # 单处理机系统中多道程序运行时的特点:
        # (1)多道:计算机内存中同时存放几道相互独立的程序;
        # (2)宏观上并行:同时进入系统的几道程序都处于运行过程中,即它们先后开始了各自的运行,但都未运行完毕;
        # (3)微观上串行:实际上,各道程序轮流地用CPU,并交替运行。
        # 多道程序系统的出现,标志着操作系统渐趋成熟的阶段,先后出现了作业调度管理、处理机管理、存储器管理、外部设备管理、文件系统管理等功能。
        # 由于多个程序同时在计算机中运行,开始有了空间隔离的概念,只有内存空间的隔离,才能让数据更加安全、稳定。
        # 出了空间隔离之外,多道技术还第一次体现了时空复用的特点,遇到IO操作就切换程序,使得cpu的利用率提高了,计算机的工作效率也随之提高。
    # 多道批处理系统
        # 它有两个特点:
        # (1)多道:系统内可同时容纳多个作业。这些作业放在外存中,组成一个后备队列,系统按一定的调度原则每次从后备作业队列中选取一个或多个作业进入内存运行,运行作业结束、退出运行和后备作业进入运行均由系统自动实现,从而在系统中形成一个自动转接的、连续的作业流。
        # (2)成批:在系统运行过程中,不允许用户与其作业发生交互作用,即:作业一旦进入系统,用户就不能直接干预其作业的运行。
    # 分时系统
        # 特点:
        # (1)多路性。若干个用户同时使用一台计算机。微观上看是各用户轮流使用计算机;宏观上看是各用户并行工作。
        # (2)交互性。用户可根据系统对请求的响应结果,进一步向系统提出新的请求。这种能使用户与系统进行人机对话的工作方式,明显地有别于批处理系统,因而,分时系统又被称为交互式系统。
        # (3)独立性。用户之间可以相互独立操作,互不干扰。系统保证各用户程序运行的完整性,不会发生相互混淆或破坏现象。
        # (4)及时性。系统可对用户的输入及时作出响应。分时系统性能的主要指标之一是响应时间,它是指:从终端发出命令到系统予以应答所需的时间。
    # 实时系统
        #  实时系统可分成两类:
        # (1)实时控制系统。当用于飞机飞行、导弹发射等的自动控制时,要求计算机能尽快处理测量系统测得的数据,及时地对飞机或导弹进行控制,或将有关信息通过显示终端提供给决策人员。当用于轧钢、石化等工业生产过程控制时,也要求计算机能及时处理由各类传感器送来的数据,然后控制相应的执行机构。
        # (2)实时信息处理系统。当用于预定飞机票、查询有关航班、航线、票价等事宜时,或当用于银行系统、情报检索系统时,都要求计算机能对终端设备发来的服务请求及时予以正确的回答。此类对响应及时性的要求稍弱于第一类。
        # 实时操作系统的主要特点:
        # (1)及时响应。每一个信息接收、分析处理和发送的过程必须在严格的时间限制内完成。
        # (2)高可靠性。需采取冗余措施,双机系统前后台工作,也包括必要的保密措施等。
        # 分时系统和实时系统的比较
        # 分时——现在流行的PC,服务器都是采用这种运行模式,即把CPU的运行分成若干时间片分别处理不同的运算请求 linux系统
        # 实时——一般用于单片机上、PLC等,比如电梯的上下控制中,对于按键等动作要求进行实时处理
    # 通用操作系统
        # 操作系统的三种基本类型:多道批处理系统、分时系统、实时系统。
        # 通用操作系统:具有多种类型操作特征的操作系统。可以同时兼有多道批处理、分时、实时处理的功能,或其中两种以上的功能。
    # 操作系统的进一步发展
        # 个人计算机操作系统
        # 个人计算机上的操作系统是联机交互的单用户操作系统,它提供的联机交互功能与通用分时系统提供的功能很相似。
        # 网络操作系统
        # 计算机网络:通过通信设施,将地理上分散的、具有自治功能的多个计算机系统互连起来,实现信息交换、资源共享、互操作和协作处理的系统。
            # 网络操作系统:在原来各自计算机操作系统上,按照网络体系结构的各个协议标准增加网络管理模块,其中包括:通信、资源共享、系统安全和各种网络应用服务。
        # 分布式操作系统
        # 网络操作系统和分布式操作系统的区别
            # (1)分布式系统要求一个统一的操作系统,实现系统操作的统一性。
            # (2)分布式操作系统管理分布式系统中的所有资源,它负责全系统的资源分配和调度、任务划分、信息传输和控制协调工作,并为用户提供一个统一的界面。
            # (3)用户通过这一界面,实现所需要的操作和使用系统资源,至于操作定在哪一台计算机上执行,或使用哪台计算机的资源,则是操作系统完成的,用户不必知道,此谓:系统的透明性。
            # (4)分布式系统更强调分布式计算和处理,因此对于多机合作和系统重构、坚强性和容错能力有更高的要求,希望系统有:更短的响应时间、高吞吐量和高可靠性。
# 总结
# 操作系统应该分成两部分功能
#一:隐藏了丑陋的硬件调用接口,为应用程序员提供调用硬件资源的更好,更简单,更清晰的模型(系统调用接口)。应用程序员有了这些接口后,就不用再考虑操作硬件的细节,专心开发自己的应用程序即可。
#二:将应用程序对硬件资源的竞态请求变得有序化
操作系统的历史的理论知识

进程

# 什么是进程:
#狭义定义:运行中的程序
#广义定义 : 进程是一个具有一定独立功能的程序关于某个数据集合的一次运行活动。它是操作系统动态执行的基本单元,在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。
# 进程的特征:
#动态性:进程的实质是程序在多道程序系统中的一次执行过程,进程是动态产生,动态消亡的。
#并发性:任何进程都可以同其他进程一起并发执行
#独立性:进程是一个能独立运行的基本单位,同时也是系统分配资源和调度的独立单位;
#异步性:由于进程间的相互制约,使进程具有执行的间断性,即进程按各自独立的、不可预知的速度向前推进
#结构特征:进程由程序、数据和进程控制块三部分组成。
# 程序和进程的区别
    # 程序是永久存在硬盘中
    # 进程是运行时暂时存在内存中
# 进程调度
    # 先来先服务调度算法
    # 先来先服务(FCFS)调度算法是一种最简单的调度算法,该算法既可用于作业调度,也可用于进程调度。FCFS算法比较有利于长作业(进程),而不利于短作业(进程)。由此可知,本算法适合于CPU繁忙型作业,而不利于I/O繁忙型的作业(进程)。
    # 短作业优先调度算法
    # 短作业(进程)优先调度算法(SJ/PF)是指对短作业或短进程优先调度的算法,该算法既可用于作业调度,也可用于进程调度。但其对长作业不利;不能保证紧迫性作业(进程)被及时处理;作业的长短只是被估算出来的。
    # 时间片轮法
    # 时间片轮转(Round Robin,RR)法的基本思路是让每个进程在就绪队列中的等待时间与享受服务的时间成比例。把一个时间分成多份,每一份的时间就是时间片,每一片时间就是CPU调度的时间
    # 多级反馈队列
        # 根据优先级和时间片轮转分配任务的时间,越短的作业优先级越高,分配的时间越短,越长的优先级越低的作业分配的时间也就越长

 # 进程的并行和并发
    # 并行 并行是指两者同时执行,比如赛跑,两个人都在不停的往前跑;只有多核的时候才能实现并行
    # 并发 并发是指资源有限的情况下,两者交替轮流使用资源

# 进程的三状态装换图
    # 创建 —— 提交 —— 就绪 —— 进程调度 —— 运行 —— 释放 —— 退出
    # 创建 —— 提交 —— 就绪 —— 运行 —— 时间片到 —— 就绪
    # 创建 —— 提交 —— 就绪 —— 运行 —— 事件请求 —— 阻塞 —— 事件发生 —— 就绪
# 三状态
# (1)就绪(Ready)状态
    # 当进程已分配到除CPU以外的所有必要的资源,只要获得处理机便可立即执行,这时的进程状态称为就绪状态
# (2)执行/运行(Running)状态
    # 当进程已获得处理机,其程序正在处理机上执行,此时的进程状态称为执行状态。
# (3)阻塞(Blocked)状态
    # 阻塞(Blocked)状态正在执行的进程,由于等待某个事件发生而无法执行时,便放弃处理机而处于阻塞状态。引起进程阻塞的事件可有多种,例如,等待I/O完成、申请缓冲区不能满足、等待信件(信号)等。

# 同步和异步
    # 同步:所谓同步就是一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成,这是一种可靠的任务序列
    # 异步:所谓异步是不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了整个任务就算完成了。
# 例如:比如我去银行办理业务,可能会有两种方式:
第一种 :选择排队等候;
第二种 :选择取一个小纸条上面有我的号码,等到排到我这一号时由柜台的人通知我轮到我去办理业务了;
第一种:前者(排队等候)就是同步等待消息通知,也就是我要一直在等待银行办理业务情况;
第二种:后者(等待别人通知)就是异步等待消息通知。在异步消息处理中,等待消息通知者(在这个例子中就是等待办理业务的人)往往注册一个回调机制,在所等待的事件被触发时由触发机制(在这里是柜台的人)通过某种机制(在这里是写在小纸条上的号码,喊号)找到等待该事件的人。
# 阻塞和非阻塞
    # 阻塞:程序过程中停止了
    # 非阻塞:程序过程中一直不停止

# 1. 同步阻塞形式
    #效率最低。拿上面的例子来说,就是你专心排队,什么别的事都不做。
# 2. 异步阻塞形式
    # 如果在银行等待办理业务的人采用的是异步的方式去等待消息被触发(通知),也就是领了一张小纸条,假如在这段时间里他不能离开银行做其它的事情,那么很显然,这个人被阻塞在了这个等待的操作上面;
    #异步操作是可以被阻塞住的,只不过它不是在处理消息时阻塞,而是在等待消息通知时被阻塞。
# 3. 同步非阻塞形式
  #实际上是效率低下的。想象一下你一边打着电话一边还需要抬头看到底队伍排到你了没有,如果把打电话和观察排队的位置看成是程序的两个操作的话,这个程序需要在这两种不同的行为之间来回的切换,效率可想而知是低下的。
# 4. 异步非阻塞形式
  #效率更高,因为打电话是你(等待者)的事情,而通知你则是柜台(消息触发机制)的事情,程序没有在两种不同的操作中来回切换。
# 进程的创建与结束
    # 进程的创建
而对于通用系统(跑很多应用程序),需要有系统运行过程中创建或撤销进程的能力,主要分为4中形式创建新的进程:
  #1. 系统初始化(查看进程linux中用ps命令,windows中用任务管理器,前台进程负责与用户交互,后台运行的进程与用户无关,运行在后台并且只在需要时才唤醒的进程,称为守护进程,如电子邮件、web页面、新闻、打印)
  #2. 一个进程在运行过程中开启了子进程(如nginx开启多进程,os.fork,subprocess.Popen等)
  #3. 用户的交互式请求,而创建一个新进程(如用户双击暴风影音)
  #4. 一个批处理作业的初始化(只在大型机的批处理系统中应用)
  #无论哪一种,新进程的创建都是由一个已经存在的进程执行了一个用于创建进程的系统调用而创建的。  
# 进程的结束
#1. 正常退出(自愿,如用户点击交互式页面的叉号,或程序执行完毕调用发起系统调用正常退出,在linux中用exit,在windows中用ExitProcess)
#2. 出错退出(自愿,python a.py中a.py不存在)
#3. 严重错误(非自愿,执行非法指令,如引用不存在的内存,1/0等,可以捕捉异常,try...except...)
#4. 被其他进程杀死(非自愿,如kill -9)
进程的理论知识

猜你喜欢

转载自www.cnblogs.com/HanZeSon/p/10229658.html