关于轮询、中断、随机加快速排序算法 的认知

1264 2022-03-02 11:47

首先轮询概念用于cpu的I/O控制方式,其中程序直接控制方式就是轮询。它的进阶路线是:程序直接控制方式(轮询)-》中断驱动方式-》DMA方式-》通道控制方式

CPU调度算法:先来先服务(FCFS)、最短作业优先(SJF)、最高响应比优先(HRRN)、时间片轮转调度算法、优先级调度算法、多级反馈队列调度算法

 

一、而在arduino中,如果采用中断方式来设计定时任务需要注意:

在Arduino中使用中断需要注意的问题

    由于中断会打断正常代码的运行,因此ISR的应该尽可能快地执行完毕。
    在ISR中修改的全局变量要用volatile修饰符修饰以防止编译器优化
    在ISR中不能使用其他用中断实现的函数,如millis() delay() 等。延时可以使用 delayMicroseconds(),它不是用中断实现的。

ps:接收中断的物理设备的驱动程序将注册一个或多个中断服务例程 (ISR) 服务中断。 系统每次收到该中断时都调用 ISR。

二、在程序设计中,当有一个定时任务时

考虑观察者模式设计。但总有一个轮询!

当我们把可复用的轮询藏到底层时,上层就抽象出了一个强大的事件驱动模型,将该模型应用到软件系统的设计层面,又发现了不同于传统CRUD模式的CQRS模式

三、快速排序是一个不稳定的交换算法

 

如此看来,有人可能就想到了,从数学公式上看,归并排序还比快排要少个1呢,是不是要快些?其实,不是这样的,请注意到那几个字"最差的情况下",就是在我每次选择的基准,取决于输入的基准,都是最不理想的基准,恰好要移动最多次才能达到目的。但是这种情况的出现的概率是1/(2^n),非常非常小,而且,这是最普通的快速排序方法,先人提出了很多改进优化的方案,其中一种被很常用的就是采用随机函数来选择基准来避免最坏的情况的发生。

全部评论

·