并发编程

Posted ygzico

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了并发编程相关的知识,希望对你有一定的参考价值。

并发编程

一、操作系统发展史

  • 穿孔卡片
    • 读取数据速度特别慢
    • CPU的利用率极低
    • 单用户(一份代码)使用
  • 批处理
    • 读取速度特别慢
    • CPU利用率极低
    • 联机(多份代码)使用
    • 效率还是很低
  • 脱机批处理(现代操作系统的设计原理)
    • 读取数据速度提高
    • CPU的利用率提高

二、多道技术

多道技术指的是多个程序,多道技术的实现是为了解决多个程序竞争或者说共享同一个资源(比如CPU)的有序调度问题

  • 单道

    • 一条路走到黑,比如:a,b两个程序需要使用CPU,a先试用,b等待a使用完毕后,b才能使用CPU

    技术图片

  • 多道

    • 比如:a,b两个程序需要使用CPU,a先使用,b等待a,直到a进入"IO或执行时间过长",a会(切换+保存状态),然后b可以使用CPU,待b执行遇到"IO或执行时间过长",再将CPU执行权限交给a,直到两个程序结束

    技术图片

    • 解决方式即多路复用,多路复用分为时间上的复用和空间上的复用
    • 空间上的复用
      • 将内存分为几部分,每个部分放入一个程序,这样,同一时间内存中就有了多道程序 (多个程序使用一个CPU)
    • 时间上的复用
      • 当一个程序在等待I/O时,另一个程序可以使用CPU
      • 当执行程序遇到IO时,操作系统会将CPU的执行权限剥夺
        • 优点:CPU的执行效率提高
      • 当执行程序执行时间过长时,操作系统会将CPU的执行权限剥夺
        • 缺点:程序的执行效率低

三、进程

  • 进程:正在进行的一个过程或者一个任务。是系统进行资源分配和调度的基本单位,是操作系统的基础

  • 进程与程序

    • 程序:一堆代码文件
    • 进程:执行代码的过程,称之为进程

    这里有一个比喻:

    想象一个Tom猫正在给他的宿敌Jerry做奶油蛋糕

    他有做奶油蛋糕的食谱及所需的所有原料:面粉、鸡蛋、奶油等

    在这个比喻中:

    • 做蛋糕的食谱就是程序
    • Tom猫就是处理器(CPU)
    • 而做蛋糕的各种原料就是输入数据
    • 进程就是Tom猫阅读食谱、取来各种原料以及烘制蛋糕等一系列动作的总和

    现在假设Tom猫的主人站在门外需要Tom取开门

    Tom想了想,给主人开门的任务比给Jerry做蛋糕的任务更重要,于是Tom立马记下照着食谱做到第几步(保存进程的当前状态),然后跑去给主人开门。这里,我们看到处理器从一个进程(做蛋糕)切换到另一个高级优先级的进程(开门),每个进程拥有各自的程序(食谱和开锁),开门之后,Tom又回来从他离开时的那一步继续做蛋糕


四、进程调度

要想多个进程交替运行,操作系统必须对这些进程进行调度,这个调度也不是随机进行的,而是需要遵循一定的法则,由此就有了程序的调度算法

  • 先来先服务调度算法
    • 比如程序,a,b,若a先来,则让a先服务,待a服务完毕后,b再服务
    • 缺点:执行效率低
  • 短作业优先调度算法
    • 是指对短作业或短进程优先调度的算法,该算法既可用于作业调度,也可用于进程调度(执行时间越短,则先去调度)
    • 缺点:对长作业不利;不能保证紧迫性作业(进程)被及时处理;作业的长短只是被估算出来的。
  • 时间片轮转法
    • 比如同时有10个进程需要执行,操作系统会给10秒,然后时间片轮转法会将10秒分称10等分
  • 多级反馈队列
    • 1级队列:优先级最高,先执行此队列中程序
    • 2级队列:优先级以此类推
    • 3级队列

现代操作系统的进程调度算法:时间片乱转法+多级反馈队列

以上是关于并发编程的主要内容,如果未能解决你的问题,请参考以下文章

Go语言学习之旅--并发编程

并发编程路线

java并发编程看啥书比较好

JAVA并发编程:并发编程的认识

并发编程的基础

Java并发编程之美