• python进阶(二、并发编程:操作系统、进程)


    2.并发编程
    2.1 操作系统
    1)多道程序设计技术:
    多道程序设计技术是指允许多个程序同时进入内存并运行。即同时把多个程序放入内存,并允许它们交替在CPU中运行,它们共享系统中的各种硬、软件资源。当一道程序因I/O请求而暂停运行时,CPU便立即转去运行另一道程序。
    (1)遇到I/O操作就切换
    (2)提高CPU的利用率
    (3)进程之间数据隔离
    (4)时空复用:同一时间多个程序同时执行,同一块内存条存储多个进程数据

    2)分时技术:
    分时技术是把处理机的运行时间分成很短的时间片,按时间片轮流把处理机分配给各联机作业使用。
    若某个作业在分配给它的时间片内不能完成其计算,则该作业暂时中断,把处理机让给另一作业使用,等待下一轮时再继续其运行。由于计算机速度很快,作业运行轮转得很快,给每个用户的印象是,好像他独占了一台计算机。而每个用户可以通过自己的终端向系统发出各种操作控制命令,在充分的人机交互情况下,完成作业的运行。
    注意:分时系统没有提高cpu的效率,反而使得计算机的效率降低了。但实现了多个程序共同执行的效果,提高了用户体验。
    (1)时间分片
    (2)时间片轮转

    3)实时系统
    实时系统能够及时响应随机发生的外部事件,并在严格的时间范围内完成对该事件的处理。
    实时系统可分成两类:
    (1)实时控制系统。用于飞机飞行、导弹发射等的自动控制。
    (2)实时信息处理系统。用于预定飞机票、查询有关航班、航线、票价等事宜。

    4)操作系统的作用
    操作系统就是一个协调、管理和控制计算机硬件资源和软件资源的控制程序。

    2.2 进程
    2.2.1 相关概念
    1)进程(Process)正在运行的程序的实例,是系统进行资源分配和调度的最小基本单位,是操作系统结构的基础。操作系统中用pid来唯一标识一个进程

    2)线程:线程是进程的组成部分,它代表了一条顺序的执行流。线程是计算机中能够被操作系统调度(给CPU执行)的最小单位。

    实际执行具体编译之后代码的是线程,所以CPU执行的是解释之后的线程中的代码。

    3)并发:并发是指资源有限的情况下,多个程序交替轮流使用资源。
    宏观上:多个程序在同时执行
    微观上:多个程序轮流执行,本质还是串行
    举例:单核cpu,同时运行3个程序

    4)并行:并行是指资源够用的情况下,多个程序同时执行。
    举例:4核CPU,运行三个程序。

    5)同步:就是一个任务的完成需要依赖另外一个任务时,只有等待被依赖的任务完成后,依赖的任务才能算完成,这是一种可靠的任务序列。要么成功都成功,失败都失败,两个任务的状态可以保持一致。

    6)异步:是不需要等待被依赖的任务完成,只是通知被依赖的任务要完成什么工作,依赖的任务也立即执行,只要自己完成了整个任务就算完成了。至于被依赖的任务最终是否真正完成,依赖它的任务无法确定,所以它是不可靠的任务序列。

    7)阻塞(block):CPU不工作。如input、accept、recv、recvfrom、connect

    8)非阻塞:CPU在工作

    9)同步阻塞形式:效率最低。
    同步任务序列执行中,遇到阻塞代码。顺序执行,遇到阻塞
    input= input(“>>>”)

    10)同步非阻塞形式:实际上是效率低下的。
    同步任务序列执行中,没有遇到阻塞代码。顺序执行,没有遇到阻塞
    result = eval(1 + 2)

    11)异步非阻塞
    异步任务序列执行中,没有遇到阻塞代码。并行执行,没有遇到阻塞
    start()

    12)异步阻塞
    异步任务序列执行中,遇到阻塞代码。并行执行,遇到阻塞

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

    2)进程的三状态图:

    2.2.3 进程的调度算法
    给所有进程分配资源或者分配CPU使用权的一种方法
    (1)短作业优先
    (2)先来先服务
    (3)时间片轮转发
    (4)多级反馈算法:
    多个任务队列,优先级从高到低
    新来的任务总是优先级最高的
    每一个新任务几乎立即获得一个时间片
    执行完一个时间片之后,就会排到下一级队尾
    总是执行完优先级高得队列,才会执行优先级低的队列
    优先级越高时间片越短

    2.2.4 进程的创建与结束
    1)进程的创建:
    (1)系统初始化
    (2)一个进程在运行过程中开启了子进程
    (3)用户的交互式请求,而创建一个新进程(如用户双击暴风影音)
    (4)一个批处理作业的初始化(只在大型机的批处理系统中应用)

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

    2.2.5 multiprocessing模块
    multiprocessing不是一个模块而是python中一个操作、管理进程的包。
    multi是取自multiple的多功能的意思,在这个包中几乎包含了和进程有关的所有子模块。
    由于提供的子模块非常多,将这部分大致分为四个部分:
    创建进程部分,
    进程同步部分,
    进程池部分,
    进程之间数据共享。

  • 相关阅读:
    让服务器可以下载apk和ipa文件
    MVC第一次访问比较慢的解决方案
    [C#]记录程序耗时的方法【转发】
    uploadify上传带参数及接收参数的方法
    uploadify上传之前判断一个input输入框是否为空
    jgGrid获得的id值是主键的id而不是jqGrid的行号值
    jqGrid删除多行数据问题
    Linux下的微秒级定时器: usleep, nanosleep, select, pselect
    Linux平台延时之sleep、usleep、nanosleep、select比较
    Linux 高精確的時序(sleep, usleep,nanosleep) from:http://blog.sina.com.cn/s/blog_533ab41c0100htae.html
  • 原文地址:https://www.cnblogs.com/bdzxh/p/14080691.html
Copyright © 2020-2023  润新知