异步和同步术语
当与编程相关时,我对术语异步感到困惑。 在编程术语中,它似乎与字典中定义的相反。 例如, 同步一词意味着:
发生在同一时间; 时间一致; 同期; 同时。
继续以相同的速度和完全一起; 一起重复。
然而,维基百科说:
“在编程中, 异步事件是独立于主程序流的事件。异步动作是在非阻塞方案中执行的动作,允许主程序流继续处理。”
是不是“非阻塞”并且允许“主程序流程继续处理”的同步或“同时发生”? 似乎同步一词表示“非阻塞”和异步,“阻塞”。 为什么这些术语在与编程相关时似乎反向使用,或者它与我不理解的低级计算有关?
当我使用同步AJAX调用时,我会执行以下操作…
$.ajax({ url: somefile.php, async: false, success: { ...code that gets run on success... } }); ...code that gets run after the ajax-success code runs...
有了这个,它实际上在运行脚本的其余部分之前等待响应,这是一个阻塞动作。 那么为什么这个被称为同步,当它与任何其他过程不同步时,实际上却相反?
实际上,这是其中一种情况,其中该词的原始含义被颠覆,并且意味着与流行用法不同的东西。
电信中的“同步”意味着只要接收到信息,接收器就会发出信号,并且只有在此信号之后,发送器才会开始发送。 当发送器完成该消息时,它将发出信号已完成,以便接收器现在可以处理接收到的消息并执行下一步应该做的事情。
这当然是一种简化和非常宽泛的一种,但是它应该让你感觉到“(a)同步”的含义来自于JS。
因此JS中的同步请求实际上与程序的主流同步。 程序向服务器发送请求(’我准备接收’)并等待消息。 来自服务器的消息将具有明确定义的结束(’消息在此处结束 – 完成您的工作’)。 当收到它时,JS知道它可以继续执行程序。
同步: – 当每个任务连接并依赖于前一个任务时
异步: – 每个任务独立于其他任务。
在您的问题的上下文中Synchronous
意味着2个部分正在等待彼此。
例如,如果您有一个客户端代码向服务器发出请求,并且您的代码在服务器响应到达之前不会继续处理,那么这意味着您的代码是同步的,即与服务器的响应同步。
如果您的客户端代码发出请求但没有等待响应并继续其处理,并且一旦来自服务器的请求的响应到达,那么您的代码(例如在特定处理程序中)开始处理响应然后处理是异步,即核心客户端处理与服务器的响应是异步的。
这些术语意味着缺乏依赖性,因为如果(使用客户端 – 服务器的示例)响应对于客户端继续其处理是强制性的,则不可能将同步代码转换为异步。
是不是“非阻塞”并且允许“主程序流程继续处理”的同步或“同时发生”? 似乎同步一词表示“非阻塞”和异步,“阻塞”。
对条款的错误解释。 它不是同步的程序流程。 不同的部分可能是(例如线程),也可能不是可以同步或不同步的同一程序的一部分。
同步请求:在执行另一个请求之前等待该特定请求的响应时,该请求被称为同步。 即,当客户端同步进行呼叫时,它会阻止客户端浏览器,以确保客户端在获取前一次呼叫的服务器响应之前无法再进行另一次呼叫。
异步请求:异步调用独立工作,即它不会在执行另一个调用或请求之前等待服务器响应。 所以你可以在不等待服务器响应的情况下同时进行不同的调用。
同步使浏览器无响应,直到请求完成,即说它将等待请求被提供,而异步将允许浏览器在等待响应时继续处理。