对于术语“同步”和“异步”的认识

写作缘由

在计算机领域,经常会遇到“同步”(synchronous)和“异步”(asynchronous)两个术语。而且它们还出现在不同的上下文中。我好奇“同步”和“异步”到底是什么意思,以及它们的含义是否会随上下文变化而变化,我指的是本质上的变化。

这里总结两个出现术语“同步”和“异步”的场景:编程中的函数调用和体系结构中的异常。

函数调用中的“同步”和“异步”

有时候会遇到称某个函数是同步调用的或异步调用的。比如 JavaScript 中的异步调用。

我理解一般的函数都是同步调用的,也就是在这个函数执行完毕之前,不会执行该函数调用之后的代码。

那么所谓异步调用,也就是函数被调用执行后,不等这个函数执行完毕,就会执行该函数调用之后的代码。这时想必不止有一个程序流了,推测异步函数调用开启了新的线程或进程。

体系结构中异常的“同步”和“异步”

在学习 armv8 架构时,我再次遇到了同步异常和异步异常这两个概念,armv8 中的分类大概是这样的:

同步异常是在处理器执行指令的过程中产生的。

异步异常是在处理器外部产生的,比如时钟中断,这个中断信号是由处理器外的时钟产生的。

总结

表面上,上文中两个场景下的“同步”和“异步”描述的是毫不相干的内容,但本质上却是一致的。本质上,同步是指事件的发生与程序流有根本的联系,异步是指事件的发生与程序流根本上没有联系。比如“同步函数返回”这个事件发生在函数执行完毕,主程序将从这个事件开始继续执行,事件与程序流是有联系的;而“异步函数返回”这个事件和主程序执行到了哪里毫无关系。比如“同步异常”是在执行程序流中的特定指令时产生的,它的发生和程序流的执行有本质的联系;“异步异常”的发生是外界因素导致的,跟程序流执行到哪里无关。

术语“同步”和“异常”肯定还出现在其他上下文中,比如“进程同步与互斥”中的“同步”。对于“同步”和“异常”出现的各种情况,我难以考虑全面。但我不加证明的给出一个最根本,能解释一切的本质:同步是指两个或多个实体的动作是协同的,异步是指两个或多个实体的动作是无需协同的。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值