总结linux编程相关各种同步/异步如何理解

在编程时,大家常常会解除到 同步、异步这个 概念。如:
同步通信、异步通信;同步调用,异步调用;同步io,异步io。到底如何理解这里面的同步和异步行为?

同一个词汇在不同上下文中都有差异,在理解概念的时候 不要扣字眼,一定要联系上下文去理解。以下几个概念之间大部分是完全割裂的,不要绕在一起理解。

硬件 同步时钟与异步时钟—针对时钟是否同源描述

讨论两个时钟时,当两个时钟间的相位是固定关系的,则可以称这两个时钟为同步时钟。一般同源,如由同一个PLL产生的两个时钟可以称为同步时钟,因此可以将主时钟和与之对应的衍生时钟约束成同一个时钟组。无法判定两个时钟间相位时,则可以称这两个时钟为异步时钟。两个来自不同晶振的时钟,一定是异步时钟。

硬件 (如串口)的同步通信/异步通信—针对数据连接交互机制描述

串口通信 存在同步通信和异步通信两中种。
同步通信进行数据传输时,要求发送和接收双方要保持完全的同步,因此,要求接收和发送设备必须使用同一时钟。同步通信可以实现高速度、大容量的数据传送。效率较高,但是方案较复杂。
异步通信时不要求接收端时钟和发送端时钟同步,发送端发送完一个字节后,可经过任意长的时间间隔再发送下一个字节。异步通信信道利用率较低(因为开始位和停止位的开销所占比例较大),故效率相对较低,方案简单。

对象之间或者函数之间 调用的 同步/ 异步—针对调用返回任务是否完成描述

这里的同步指对象和函数之间调用关系。
同步调用:调用者发出调用后,没有得到结果前不会返回,需要等待被调用者相关执行完成,得到结果后调用完成返回。
异步调用:调用者发出调用后,立即返回。要执行的过程和结果并没有完成,由被调用者后续执行,如果需要返回结果 在后续执行完成后通过状态、消息、或者回调来通知被调用者。

Linux的内核同步机制 / 并发 / 临界区—针对CPU线程执行时机的描述

要理解linux内核同步,要先理解 并发、临界区、共享资源 的 概念。

共享资源:多个执行线程(内核描述正在执行的代码实例,比如内核执行的进程、中断处理程序或者内核线程的执行)可能同时访问或操作的数据。这个数据可能发生多个执行线程之间相互覆盖共享数据的情况,引起访问数据不一致性,特别是部分覆盖情况,造成异常隐患。

并发:并发是指多个线程同时运行,早期的单核处理器的并发场景相对简单,linux从2.0版本开始就支持多对称处理器,2.6开始引入内核抢占机制,并发变得复杂。从内核的角度看: 进程上下文 与 进程上下文 / 进程上下文与 内核线程 / 进程上下文 与 中断(硬中断、软中断、tasklet)/ 中断与中断 / 中断与内核线程 / 内核线程 与 内核线程 都可能发生。 发生的原因有 中断的发生、软中断/tasklet的发生、内核的抢占、睡眠及与用户空间同步、多对称处理引发的并发。

临界区:也叫临界段,就是访问和操作共享数据的代码段,为了避免多个执行线程在临界区并发访问,就必须保证这些代码原子执行,也就是在执行结束前不可被打断。

内核同步:为了达到多个执行线程协同目的而设计的机制,通常包含异步通信机制和互斥机制;典型的同步方法有:原子操作、自旋锁(包括读写锁)、信号量、互斥体 等。
可以参考:https://blog.csdn.net/runafterhit/article/details/78419997

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值