1、什麼是非同步?
非同步作業通常用於執行完成時間可能較長的任務,如開啟大檔案、串連遠程 電腦或查詢資料庫。非同步作業在主應用程式線程以外的線程中執行。應用程式調用方法非同步執行某個 操作時,應用程式可在非同步方法呼叫執行其任務時繼續執行。
2、同步與非同步區別
同步 (Synchronous):在執行某個操作時,應用程式必須等待該操作執行完成後才能繼續執行。
異 步(Asynchronous):在執行某個操作時,應用程式可在非同步作業執行時繼續執行。實質:非同步作業, 啟動了新的線程,主線程與方法線程並存執行。
3、非同步和多線程的區別
我們已經知道,非同步實質是開啟了新的線程。它與多線程的區別是什麼呢?
簡單的說就是:異 步線程是由線程池負責管理,而多線程,我們可以自己控制,當然在多線程中我們也可以使用線程池。
就拿網路扒蟲而言,如果使用非同步模式去實現,它使用線程池進行管理。非同步作業執行時,會將 操作丟給線程池中的某個背景工作執行緒來完成。當開始I/O操作的時候,非同步會將背景工作執行緒還給線程池,這意 味著擷取網頁的工作不會再佔用任何CPU資源了。直到非同步完成,即擷取網頁完畢,非同步才會通過回調的 方式通知線程池。可見,非同步模式藉助於線程池,極大地節約了CPU的資源。
註:DMA(Direct Memory Access)直接記憶體存取,顧名思義DMA功能就是讓裝置可以繞過處理器,直接由記憶體來讀取資料 。通過直接記憶體存取的資料交換幾乎可以不損耗CPU的資源。在硬體中,硬碟、網卡、音效卡、顯卡等都有 直接記憶體存取功能。非同步編程模型就是讓我們充分利用硬體的直接記憶體存取功能來釋放CPU的壓力。
兩者的應用情境:
計算密集型工作,採用多線程。
IO密集型工作,採用非同步機制。
4 、非同步應用
.NET Framework 的許多方面都支援非同步編程功能,這些方麵包括:
1)檔案 IO、 流 IO、通訊端 IO。
2)網路。
3)遠端通道(HTTP、TCP)和代理。
4)使用 ASP.NET 創 建的 XML Web services。
5)ASP.NET Web Form。
6)使用 MessageQueue 類的訊息佇列。
.NET Framework 為非同步作業提供兩種設計模式:
1)使用 IAsyncResult 對象的非同步作業。