分不清 同步与异步,阻塞与非阻塞~

文摘   2024-07-16 22:13   广东  


正文

     

大家好,我是bug菌~
最近跟几个伙计交流技术的时候,经常性的把"同步与异步","阻塞与非阻塞"两组概念搞混,其实两者还是有着本质的区别的,更何况还有"同步阻塞"、“异步非阻塞”等等各种组合,那么今天大致跟大家一起聊聊:

1

同步与异步

同步和异步区别在于当你的程序处理一项事务时是否需要等待操作完成才能继续执行其他任务。

同步表示的是顺序执行,当程序执行一个任务需要的等待任务完成,才能继续往下执行。

而对于异步则是发起一个任务后不用等待任务执行完成,就可以继续往后执行,而异步的任务处理通常通过回调函数、事件监听来处理任务完成或数据准备就绪。

所以总结起来,同步和异步描述的是被调用方相对调用方的处理方式。

同步:按照顺序执行任务,任务之间有依赖关系,一个任务完成后才能进行下一个任务。

异步:不按照顺序执行任务,任务之间可以并列执行,一个任务开始后可以立即执行下一个任务,不必等待处理结果。

在C语言程序里面同步和异步的差别,你就可以认为是任务函数所调用的时机。单片机中断处理是一种典型的异步事件处理机制。当一个中断事件发生时,处理器会立即跳转到中断服务程序(ISR),这种情况可以看作是异步的,中断的发生与主程序的执行流程是分离的。

2

阻塞与非阻塞

这里看到阻塞可能大家疑惑了,同步不就是阻塞当前线程等待返回继续往后执行吗?

这句话不对,同步也可以不阻塞当前线程不断地轮询等待正确的返回后继续往后执行。

所以阻塞与非阻塞关键看发起任务执行后当前线程是否让出CPU而挂起,阻塞与非阻塞描述的是等待消息通知时的线程的状态。

异步处理强调的是非阻塞和并发执行,适用于需要高效利用系统资源、快速响应的场景;而同步处理则更侧重于任务的顺序执行和阻塞等待,适用于依赖严格顺序和同步操作的场景。

最后

      好了,今天就跟大家分享这么多了,如果你觉得有所收获,一定记得点个~

唯一、永久、免费分享嵌入式技术知识平台~

推荐专辑  点击蓝色字体即可跳转

☞  MCU进阶专辑 

☞  嵌入式C语言进阶专辑 

☞  “bug说”专辑 

☞ 专辑|Linux应用程序编程大全

☞ 专辑|学点网络知识

☞ 专辑|手撕C语言

☞ 专辑|手撕C++语言

☞ 专辑|经验分享

☞ 专辑|电能控制技术

☞ 专辑 | 从单片机到Linux

最后一个bug
一个嵌入式技术进阶公众号,定期分享C语言,C++、MCU(如stm32等)、DSP、ARM、嵌入式Linux等“独门”软件设计技巧和知识归纳总结,同时分享应用程序设计、物联网、滤波及控制算法推导和仿真设计等嵌入式硬核知识技巧!欢迎大家关注!
 最新文章