当涉及到编程时,我被异步这个术语搞糊涂了。在编程术语中,它的意思似乎与字典中的定义相反。例如,单词synchronous的意思是:
同时发生的;在时间上一致的;同时发生的;以相同的速度和完全相同的速度同时发生;一起重复发生。
然而,维基百科说:
“在编程中,异步事件是那些独立于主程序流发生的事件。异步操作是以非阻塞模式执行的操作,允许主程序流继续处理。”
难道“非阻塞”和允许“主程序流继续处理”的东西不会被同步或“同时发生”吗?似乎同步这个术语暗示着“非阻塞”和异步,“阻塞”。为什么当涉及到编程时,这些术语似乎是反向使用的,或者它与我不理解的低级计算有关吗?
当我使用同步AJAX调用时,我执行以下操作...
$.ajax({
url: somefile.php,
async: false,
success: {
...code that gets run on success...
}
});
...code that gets run after the ajax-success code runs...
这样,它实际上是在运行脚本的其余部分之前等待响应,这是一个阻塞操作。那么,为什么这被称为同步,而它不与任何其他进程同步,而实际上是相反的?
发布于 2011-08-20 21:38:24
事实上,这是其中的一个案例,这个词的原始含义被颠覆了,意思与流行用法不同。
在远程通信中的“同步”意味着接收器在准备好接收消息时发出信号,并且只有在该信号之后发射器才会开始发送。当发送器处理完消息时,它将发出消息已完成的信号,因此接收器现在可以处理接收到的消息,并执行下一步应该执行的操作。
这当然是一种简化,也是一种非常广泛的简化,但它应该会让您感觉到“(A)同步”的含义来自于JS。
因此,JS中的同步请求实际上与程序的主流程同步。程序向服务器发送请求(‘我准备好接收了’)并等待消息。来自服务器的消息将有一个定义良好的结尾(‘消息在这里结束-做你的工作’)。当它被接收时,JS知道它可以继续执行程序。
发布于 2011-08-20 21:41:23
同步:-当每个任务连接并依赖于前一个任务时
异步:-每个任务独立于其他任务。
发布于 2011-08-20 21:45:47
在你的问题的上下文中,Synchronous
意味着两个部分正在等待对方。
例如,如果您有一个向服务器发出请求的客户端代码,并且您的代码在服务器的响应到达之前不会继续其处理,那么这意味着您的代码是同步的,即与服务器的响应同步。
如果您的客户端代码发出请求但不等待响应并继续其处理,并且一旦来自服务器的请求的响应到达,则您的代码(例如,在特定处理程序中)开始处理响应,则处理是异步的,即核心客户端处理与服务器的响应是异步的。
这些术语暗示了dependency的不足,因为如果(使用客户机-服务器的示例)响应对于客户机继续其处理是强制的,则不可能将同步代码转换为异步代码。
会不会有一些“非阻塞”的东西,允许“主程序流继续处理”,被同步或“同时发生”?似乎同步这个术语暗示着“非阻塞”和异步,“阻塞”。
对术语的错误解释。同步的不是程序流。它是不同的部分,可以是(例如线程),也可以是不是同一程序的一部分,可以被同步或者不被同步。
https://stackoverflow.com/questions/7131991
复制相似问题