• 系统调度问题


    一、什么是调度

      当有多个线程在操作时,如果系统只有一个CPU,则它根本不可能真正同时进行一个以上的线程,它只能把CPU运行时间划分成若干个时间段,再将时间段分配给各个线程执行,在一个时间段的线程代码运行时,其它线程处于挂起状,这个分配CPU时间的过程就是调度

    二、调度的方式

      2.1 非剥夺方式:分派程序一旦把CPU分配给某进程后便让它一直运行下去,直到进程完成或发生某事件而阻塞时,才把处理机分配给另一个进程。

        2.2 剥夺方式

      当一个进程正在运行时,系统可以基于某种原则,剥夺已分配给它的CPU,将之分配给其它进程。剥夺原则有:优先权原则、短进程优先原则、时间片原则。
      例如,有三个进程P1、P2、P3先后到达,它们分别需要20、4和2个单位时间运行完毕。
    假如它们就按P1、P2、P3的顺序执行,且不可剥夺,则三进程各自的周转时间分别为20、24、
    26个单位时间,平均周转时间是23.33个时间单位。
    假如用时间片原则的剥夺调度方式,可得到:
    可见:P1、P2、P3的周转时间分别为26、10、6个单位时间(假设时间片为2个单位时间),平均周转时间为14个单位时间。
    衡量进程调度性能的指标有:周转时间、响应时间、CPU-I/O执行期
     

    三、为什么出现调度不过来?

      3.1调度不过来,简单来说,就是要求CPU在1小时内做1.5小时的工作量,CPU在1小时做不过来,就导致部分任务无法做;

      3.2为什么出现?

      CPU性能(工作效率:跟频率,cpu核数相关)不足以胜任这份工作量

      工作量太大,减少工作量

      程序占用太多CPU,要写出好的程序,1.尽量少调用效率低的接口(哪些是接口比较耗cpu???),2.线程/进程不需要CPU时,主动让出来;

  • 相关阅读:
    jQuery基础知识
    在nginx上部署django项目--------Gunicorn+Django+nginx+mysql
    pycharm激活码------2017.11.之前有效
    nginx安装及优化
    Python sh模块--------替换subprocess的利器
    Django1.10官方文档翻译
    神秘的.user.ini文件
    Thinkphp5 分页带参数
    javascript 点击按钮实现隐藏显示切换效果
    Centos 7 安装 Supervisor 及使用
  • 原文地址:https://www.cnblogs.com/jly594761082/p/10310424.html
Copyright © 2020-2023  润新知