這裏有定義,維基百科:'異步','非阻塞'和'併發'是否意味着彼此?
和:
在單線程計算的情況下,做 '異步', '無阻塞',並'併發'暗示彼此?
如果不是,你能給我一個反例嗎?
請注意,我已經排除了「並行」這個詞,因爲它暗含着多個線程。
這裏有定義,維基百科:'異步','非阻塞'和'併發'是否意味着彼此?
和:
在單線程計算的情況下,做 '異步', '無阻塞',並'併發'暗示彼此?
如果不是,你能給我一個反例嗎?
請注意,我已經排除了「並行」這個詞,因爲它暗含着多個線程。
非阻塞操作是基於兩種方法:
請注意:兩個選項都是而不是暗示併發性或客戶端上的多個線程。您絕對可以使用單個進程來實現這樣的系統(例如,想想coroutines或node.js)。
在這個意義上:一非阻塞操作總是異步 - 因爲你不知道什麼時候就會有你的結果 - 或者什麼時候會叫你回來。兩個概念可以使用併發實現,但絕對需要這樣做。
非阻塞和併發不適用於單線程程序,因爲它們指的是管理多線程的方式。非阻塞意味着程序不會在繼續前等待所有線程完成,並且只有在有多個線程進行計算時纔會發生併發計算。 (有人請糾正我,如果我錯了)。
異步是唯一的術語,適用於單線程編程,以人類輸入的形式,與其他程序的通信等。因此,不,他們不在單線程程序的背景下並不意味着彼此。
我在我的單線程程序中始終使用非阻塞套接字。非阻塞僅僅意味着各種函數調用(send(),recv()等)被保證總是立即返回,而不是等待一段延長的時間(例如等待一些數據已被髮送或接收) –
請隨時查看我在閱讀該問題時給出的答案;-) – GhostCat
這不太正確。如果您嘗試從非阻塞套接字讀取數據,則不會收到任何迴應,而且您也不會收到回覆 - 稍後數據可用時您將不得不再次讀取數據。 –
你是對的 - 在嚴格的「套接字」意義上,沒有回調。我重新寫了;希望現在更清楚。 – GhostCat
「理論上講,您可以使用單個進程來實現這樣的系統」,但不僅僅是理論上的:例如,這是Node.js如何工作的基礎。 – Thomas