这里有定义,维基百科:'异步','非阻塞'和'并发'是否意味着彼此?
和:
在单线程计算的情况下,做 '异步', '无阻塞',并'并发'暗示彼此?
如果不是,你能给我一个反例吗?
请注意,我已经排除了“并行”这个词,因为它暗含着多个线程。
这里有定义,维基百科:'异步','非阻塞'和'并发'是否意味着彼此?
和:
在单线程计算的情况下,做 '异步', '无阻塞',并'并发'暗示彼此?
如果不是,你能给我一个反例吗?
请注意,我已经排除了“并行”这个词,因为它暗含着多个线程。
非阻塞操作是基于两种方法:
请注意:两个选项都是而不是暗示并发性或客户端上的多个线程。您绝对可以使用单个进程来实现这样的系统(例如,想想coroutines或node.js)。
在这个意义上:一非阻塞操作总是异步 - 因为你不知道什么时候就会有你的结果 - 或者什么时候会叫你回来。两个概念可以使用并发实现,但绝对需要这样做。
非阻塞和并发不适用于单线程程序,因为它们指的是管理多线程的方式。非阻塞意味着程序不会在继续前等待所有线程完成,并且只有在有多个线程进行计算时才会发生并发计算。 (有人请纠正我,如果我错了)。
异步是唯一的术语,适用于单线程编程,以人类输入的形式,与其他程序的通信等。因此,不,他们不在单线程程序的背景下并不意味着彼此。
我在我的单线程程序中始终使用非阻塞套接字。非阻塞仅仅意味着各种函数调用(send(),recv()等)被保证总是立即返回,而不是等待一段延长的时间(例如等待一些数据已被发送或接收) –
请随时查看我在阅读该问题时给出的答案;-) – GhostCat
这不太正确。如果您尝试从非阻塞套接字读取数据,则不会收到任何回应,而且您也不会收到回复 - 稍后数据可用时您将不得不再次读取数据。 –
你是对的 - 在严格的“套接字”意义上,没有回调。我重新写了;希望现在更清楚。 – GhostCat
“理论上讲,您可以使用单个进程来实现这样的系统”,但不仅仅是理论上的:例如,这是Node.js如何工作的基础。 – Thomas