首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >异步和同步术语

异步和同步术语
EN

Stack Overflow用户
提问于 2011-08-20 21:22:53
回答 5查看 13.5K关注 0票数 32

当涉及到编程时,我被异步这个术语搞糊涂了。在编程术语中,它的意思似乎与字典中的定义相反。例如,单词synchronous的意思是:

同时发生的;在时间上一致的;同时发生的;以相同的速度和完全相同的速度同时发生;一起重复发生。

然而,维基百科说:

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

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

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

代码语言:javascript
复制
$.ajax({
  url: somefile.php,
  async: false,
  success: {
    ...code that gets run on success...
  }
});

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

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

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2011-08-20 21:38:24

事实上,这是其中的一个案例,这个词的原始含义被颠覆了,意思与流行用法不同。

在远程通信中的“同步”意味着接收器在准备好接收消息时发出信号,并且只有在该信号之后发射器才会开始发送。当发送器处理完消息时,它将发出消息已完成的信号,因此接收器现在可以处理接收到的消息,并执行下一步应该执行的操作。

这当然是一种简化,也是一种非常广泛的简化,但它应该会让您感觉到“(A)同步”的含义来自于JS。

因此,JS中的同步请求实际上与程序的主流程同步。程序向服务器发送请求(‘我准备好接收了’)并等待消息。来自服务器的消息将有一个定义良好的结尾(‘消息在这里结束-做你的工作’)。当它被接收时,JS知道它可以继续执行程序。

票数 22
EN

Stack Overflow用户

发布于 2011-08-20 21:41:23

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

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

票数 17
EN

Stack Overflow用户

发布于 2011-08-20 21:45:47

在你的问题的上下文中,Synchronous意味着两个部分正在等待对方。

例如,如果您有一个向服务器发出请求的客户端代码,并且您的代码在服务器的响应到达之前不会继续其处理,那么这意味着您的代码是同步的,即与服务器的响应同步。

如果您的客户端代码发出请求但不等待响应并继续其处理,并且一旦来自服务器的请求的响应到达,则您的代码(例如,在特定处理程序中)开始处理响应,则处理是异步的,即核心客户端处理与服务器的响应是异步的。

这些术语暗示了dependency的不足,因为如果(使用客户机-服务器的示例)响应对于客户机继续其处理是强制的,则不可能将同步代码转换为异步代码。

会不会有一些“非阻塞”的东西,允许“主程序流继续处理”,被同步或“同时发生”?似乎同步这个术语暗示着“非阻塞”和异步,“阻塞”。

对术语的错误解释。同步的不是程序流。它是不同的部分,可以是(例如线程),也可以是不是同一程序的一部分,可以被同步或者不被同步。

票数 9
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7131991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档