异步与非
异步调用和非阻塞调用有什么区别? 还有阻塞和同步呼叫之间(请举例)?
在许多情况下,它们对于同一事物而言是不同的名称,但在某些情况下它们是完全不同的。 这取决于。 在整个软件行业中,术语不是以完全一致的方式应用的。
例如,在传统的套接字API中,非阻塞套接字就是一个只会立即返回一个特殊的“阻塞”错误消息,而阻塞套接字会被阻塞的套接字。 您必须使用单独的功能(如select
或poll
来确定什么时候是重试的好时机。
但是异步套接字(如Windows套接字所支持的)或.NET中使用的异步IO模式更方便。 你调用一个方法来启动一个操作,当框架完成时,框架会回复你。 即使在这里,也有基本的区别。 异步Win32套接字通过传递Window消息将它们的结果“封送”到特定的GUI线程,而.NET异步IO是自由线程的(你不知道你的回调将被调用什么线程)。
所以他们并不总是意味着同样的事情。 为了提炼插座示例,我们可以说:
正如你可以从大量不同的(而且往往是互斥的)答案中看到的,这取决于你问谁。 在某些领域,这些术语是同义词。 或者他们每个人都可以提到两个相似的概念:
无论是哪种情况,其目的都是让程序不会被阻塞,等待一个缓慢的过程完成 - 程序如何响应是唯一真正的区别。 哪一个术语是指从程序员到程序员,语言到平台,还是从平台到平台。 或者这些术语可能指的是完全不同的概念(如使用与线程编程相关的同步/异步)。
对不起,但我不相信有一个正确的答案是全球性的。
链接地址: http://www.djcxy.com/p/50817.html上一篇: asynchronous vs non