• 并发 / 并行,阻塞 / 非阻塞,同步 / 异步


    线程/进程经历的5个状态,创建,就绪,运行,阻塞,终止

    阻塞调用:   如 socket 的 recv(),调用这个函数的线程如果没有数据返回,它会一直阻塞着,也就是recv()后面的代码都不会执行了,程序就停在recv()这里等待,所以一般把 recv() 放在单独的线程里调用。

    非阻塞调用:如 socket 的 send(),调用这个函数,它只是把待发送的数据复制到TCP输出缓冲区中,就立刻返回了,线程并不会阻塞,数据有没有发出去 send() 是不知道的,不会等待它发出去才返回的。

    阻塞和挂起:阻塞是被动的,比如抢不到资源。挂起是主动的,线程自己调用 suspend() 把自己退出运行态了,某些时候调用 resume() 又恢复运行。

    死锁:如A线程要XY资源才能继续运行,B线程也要XY资源才能运行,但X,Y同时只能给一个线程用(即互斥条件)用的时候其他线程又不能抢夺。A有X等Y, B有Y等X,AB发生循环等待。

    同步:在发出一个同步调用时,在没有得到结果之前,该调用就不返回。
    异步:在发出一个异步调用后,调用者不会立刻得到结果,该调用就返回了。

    同步阻塞调用:得不到结果不返回,线程进入阻塞态等待。
    同步非阻塞调用:得不到结果不返回,线程不阻塞一直在CPU运行。

    异步阻塞调用:去到别的线程,让别的线程阻塞起来等待结果,自己不阻塞。
    异步非阻塞调用:去到别的线程,别的线程一直在运行,直到得出结果。

    并发【交替执行】:一个时间段内,有几个程序都在同一个CPU上运行,但任意一个时刻点上只有一个程序在处理机上运行。

    并行【同时执行】:一个时间段内,有几个程序都在几个CPU上运行,任意一个时刻点上,有多个程序在同时运行,并且多道程序之间互不干扰。 两者区别如下图

    并发CPU调度策略

    3.1 先来先服务 - 时间片轮转调度

               这个很简单,就是谁先来,就给谁分配时间片运行,缺点是有些紧急的任务要很久才能得到运行。

    3.2 优先级调度

              每个线程有一个优先级,CPU每次去拿优先级高的运行,优先级低的等等,为了避免等太久,每等一定时间,就给线程提高一个优先级

    3.3 最短作业优先

             把线程任务量排序,每次拿处理时间短的线程运行,就像我去银行办业务一样,我的事情很快就处理完了,所以让我插队先办完,后面时间长的人先等等,时间长的人就很难得到响应了。

    3.4 最高响应比优先

            用线程的等待时间除以服务时间,得到响应比,响应比小的优先运行。这样不会造成某些任务一直得不到响应。

    3.5 多级反馈队列调度

            有多个优先级不同的队列,每个队列里面有多个等待线程。
            CPU每次从优先级高的遍历到低的,取队首的线程运行,运行完了放回队尾,优先级越高,时间片越短,即响应越快,时间片就不是固定的了。
            队列内部还是用先来先服务的策略。

  • 相关阅读:
    EasyDSS功能简介视频直播、直播鉴权(如何完美将EasyDSS过渡到新版)
    EasyNVR前端构建之输入框样式的调整
    NVR硬件录像机web无插件播放方案(支持取特定时间段视频流)
    Windows操作系统远程Linux服务器传输文件方法(以EasyDSS云平台、EasyNVR上传部署为例)
    零基础实现摄像头的全平台直播 (二)公网直播的实现
    海康、大华NVR硬件录像机录像无插件全平台访问实现播放时间轴实现
    直播与虚拟直播
    CF585EPresent for Vitalik the Philatelist【莫比乌斯反演,狄利克雷前缀和】
    AT4519[AGC032D]Rotation Sort【dp】
    P5110块速递推【特征方程,分块】
  • 原文地址:https://www.cnblogs.com/bsszds930/p/12624916.html
Copyright © 2020-2023  润新知