异步和同步术语

Posted

技术标签:

【中文标题】异步和同步术语【英文标题】:Asynchronous and Synchronous Terms 【发布时间】:2011-10-31 05:06:02 【问题描述】:

当涉及到编程时,我对异步这个术语感到困惑。它在编程术语中的含义似乎与字典中的定义相反。例如,同步这个词的意思是:

    同时发生;时间一致;同时代的; 同时。

    以相同的速度并且完全一起进行;一起重复。

然而,***说:

“在编程中,异步事件是那些发生的事件 独立于主程序流程。异步动作是 以非阻塞方案执行的操作,允许主程序 流继续处理。”

“非阻塞”和允许“主程序流继续处理”的东西不会被同步或“同时发生”吗?似乎同步一词暗示“非阻塞”和异步“阻塞”。为什么这些术语在与编程相关时似乎被反向使用,或者它与我不理解的低级计算有关?

当我使用同步 AJAX 调用时,我会执行以下操作...

$.ajax(
  url: somefile.php,
  async: false,
  success: 
    ...code that gets run on success...
  
);

...code that gets run after the ajax-success code runs...

这样,它实际上在运行脚本的其余部分之前等待响应,这是一个阻塞操作。那么为什么这被称为同步,当它不与任何其他进程同步时,实际上相反呢?

【问题讨论】:

【参考方案1】:

确实,这是其中一种情况,该词的原始含义被颠覆,与流行用法不同。

电信中的“同步”是指接收器在准备好接收消息时发出信号,并且只有在此信号之后,发送器才会开始发送。当发送者处理完消息后,它会发出信号它已经完成,因此接收者现在可以处理接收到的消息并执行它接下来应该做的任何事情。

这当然是一种简化,也很宽泛,但它应该让你感觉到 '(a)synchronous' 在 JS 中的含义是从哪里来的。

所以JS中的同步请求其实是和程序的主流程同步的。程序向服务器发送请求(“我已准备好接收”)并等待消息。来自服务器的消息将有一个明确定义的结束('消息在这里结束 - 做你的工作')。当收到它时,JS 知道它可以继续执行程序..

【讨论】:

这就是为什么我说它失去了单词的本义。科技界的常见案例。事实上,直到你提出来,我才注意到“同步”中的二分法。有趣! 在以下上下文中是否正确使用了“异步”:github.com/gulpjs/gulp/blob/master/docs/…?这让我更加困惑。 @jbyrd:就“编程”这个词的理解而言,它是正确使用的。启动异步任务时,程序不会等待其结果,而是继续执行随后的任何任务。一旦异步任务的结果准备好,它通常会将它传递给另一个函数(回调) 我不确定这是否完全正确。从***来看,电信中的同步似乎意味着由时钟同步,其中异步表示协调是通过消息本身中包含的事件发生的,这听起来就像您所描述的通过握手进行协调。令人困惑的是,您可以使用同步方法(例如共享时钟)或使用异步方法(例如使用握手或事件)来同步事物。 我自己整个人都掉了兔子:p。它出现在软件中,当在数字电子系统中使用类似的异步协调方法时使用异步,并发任务的协调是使用由网络数据包到达触发的事件驱动架构、信号的变化(转换)、握手协议和其他方法来实现的.令人困惑的是,在软件中,同步仅用于与那些异步方法不同的所有其他方法,包括当事情开始时根本不并发时。【参考方案2】:

同步:- 当每个任务连接并依赖于前一个 任务

异步:- 每个任务独立于其他任务。

【讨论】:

简短而完美 那么“同步”在这个意义上是什么意思?【参考方案3】:

Synchronous 在您的问题中意味着 2 个部分正在相互等待。 例如,如果您有一个向服务器发出请求的客户端代码,并且您的代码在服务器的响应到达之前不会继续处理,那么这意味着您的代码是同步的,即与服务器的响应同步。 如果您的客户端代码发出请求但不等待响应并继续其处理并且一旦来自服务器的请求的响应到达,那么您的代码(例如在特定处理程序中)开始处理响应然后处理是异步,即核心客户端处理与服务器的响应是异步的。 这些术语暗示了一些依赖性,因为如果(使用客户端-服务器的示例)响应对于客户端继续其处理是强制性的,则不可能将同步代码转换为异步代码。

不会是“非阻塞”并且允许“主要 程序流程继续处理,“被同步或”发生在 同时”?似乎同步一词暗示 “非阻塞”和异步“阻塞”。

对条款的错误解释。同步的不是程序流程。不同的部分可能是(例如线程)或可能是可以同步或不同步的同一程序的一部分。

【讨论】:

【参考方案4】:

同步请求:当一个请求在执行另一个请求之前等待该特定请求的响应时,它被称为同步请求。即当客户端同步进行调用时,它会阻止客户端浏览器,以确保客户端在获得服务器对先前调用的响应之前无法进行另一次调用。

异步请求:异步调用独立工作,即它在执行另一个调用或请求之前不等待服务器响应。这样您就可以简单地同时进行不同的调用,而无需等待服务器响应。

【讨论】:

最简单的解释。谢谢!【参考方案5】:

同步使浏览器在请求完成之前无响应,即表示它将等待请求得到处理,而异步将允许浏览器在等待响应时继续处理。

【讨论】:

以上是关于异步和同步术语的主要内容,如果未能解决你的问题,请参考以下文章

同步和异步通信是如何工作的

GCD的小结

什么是Ajax ,异步,同步,JSON,XMLHttpRequest对象,什么是JSON,使用JQuery实现Ajax

Python 中的进程线程协程同步异步回调

前端技术栈:redux-saga,化异步为同步

异步和同步的区别?