同样是阻塞延时,不同人的理解是相反的?一度让我迷惑不解
对于阻塞延时和非阻塞延时,大家都是怎么理解的, 本帖最后由 gentleman 于 2024-3-8 11:36 编辑关于二者对 阻塞延时的描述
就像 函数名 可以都是 delay()
函数内部 却不同
前者是针对操作系统中 的阻塞状态
一般调用操作系统提供的延时函数实现,进入阻塞状态
实际是将任务 从任务就绪链表移除
移入任务阻塞链表
cpu依旧会从任务就绪链表取出任务运行
等待延时时间过后
再移回任务就绪链表 等待cpu进行调度
后者的描述是裸机中的常用的死延时,一些_nop_ 等空指令
非阻塞延时一般需要状态机来实现,裸机一般建议使用非阻塞延时 堵塞就是cpu啥也不干被卡住了
非堵塞就是延时的时候cpu跑去干别的的了。等延时时间到了再回来干活
实现上,堵塞一般是让cpu做无意义自加或者自减进行延时
非堵塞可以用多线程,软定时器,程序循环计数等方式实现 两者说的一个有系统 一个裸机 gentleman 发表于 2024-3-8 10:54
关于二者对 阻塞延时的描述
就像 函数名 可以都是 delay()
函数内部 却不同
我一直是第二种理解,而第一种理解,也是接触了系统后,才开始看到大家这么说,是不是可以统一起来,有时也感觉是裸机和系统的叫法不同,有时,也感觉不是,可以统一成第二种理解; jwd 发表于 2024-3-8 11:02
非阻塞延时一般需要状态机来实现,裸机一般建议使用非阻塞延时
是的
_奶咖君_ 发表于 2024-3-8 11:42
两者说的一个有系统 一个裸机
有时,我也这么理解, 拉粑粑算个流程的话.
阻塞:抽根烟,憋着,抽完拉
非阻塞:抽烟,同时拉一会吧. xiangzichen 发表于 2024-3-8 13:14
拉粑粑算个流程的话.
阻塞:抽根烟,憋着,抽完拉
通俗易懂,接地气。{:tongue:}