我一直在大量閱讀(和工作)multi-threaded applications
和IO
,而且我發現術語asynchronous
已成爲某種含糊不清的想法的一部分。我想知道我是否理解正確。我看到的方式是「異步性」有兩個主要分支。異步計算究竟是什麼?
- 異步I/O。如網絡讀/寫。這真正歸結爲多CPU之間高效的並行處理,如主CPU和NIC CPU。這個想法是讓多個處理器並行運行,交換數據,不會阻塞等待另一個完成並返回它的工作結果。
- 通過最小化線程的使用來最小化上下文切換懲罰。這似乎是.NET框架關注的異步/等待功能。不要產生/關閉/阻塞線程,而是將並行作業分解爲任務,並使用軟件任務調度程序使線程池保持儘可能的繁忙狀態,而不要求助於產生新線程。
這些看起來像是兩個完全分離的概念,沒有可能將它們綁定在一起的相似性,但都被同一個「異步計算」詞彙引用。
我能正確理解這一切嗎?
」它會花費幾秒鐘的時間來創建消息,並且有更多的時間通過網絡發送,然後創建下一條消息。「... 但是它真正等待的是NIC處理器發送一些表示網絡進程完成的返回信號。與文件I/O相同,它等待磁盤控制器報告操作已完成。 因此,在低層次上,它仍然是關於多個處理器高效地協同工作。 –
這只是一個語義問題 - 你如何描述.NET中Task_Delay(int)的異步操作?在低層只是來自櫃檯的信號,我想你不會認爲它是「多個處理器一起工作」:) –
這將解釋我的第二個異步定義。 Task.Delay(int)和Thread.Sleep(int)之間的唯一區別是Delay()不會阻塞線程。該線程返回到池以安排不同的任務。總體目標是最小化運行的線程數量,從而最大限度地減少線程開銷。如私人堆棧大小和上下文切換懲罰。這種高效的多處理器計算是非常不同的事情,這就是爲什麼它困擾我,他們被歸入相同的「異步」保護傘下。 –