如何正確運用非同步程式設計技術

2022-01-11 19:01:03 字數 1918 閱讀 8933

同步(英語:synchronization),指對在乙個系統中所發生的事件(event)之間進行協調,在時間上出現一致性與統一化的現象。說白了就是多個任務乙個乙個執行,同一時刻只有乙個任務在執行。

非同步(英語:asynchronization),指的是讓cpu暫時擱置當前請求的響應,處理下乙個請求,當通過輪詢或其他方式得到**通知後,開始執行。多執行緒將非同步操作放入另一線程中執行,通過輪詢或**方法得到完成通知,但是完成埠,由作業系統接管非同步操作的排程,通過硬體中斷,在完成時觸發**方法,此方式不需要占用額外執行緒。

2.1、asp.net mvc 中為什麼需要使用非同步呢?

iis有乙個執行緒池來處理使用者的請求,當乙個新的請求過來時,將排程池中的執行緒以處理該請求,然而,但併發量很高的情況下,池中的執行緒已經不能夠滿足這麼多的請求時候,池中的每乙個執行緒都處於忙的狀態則在處理請求時將阻塞處理請求的執行緒,並且該執行緒不能對另乙個請求提供服務,如果請求佇列已滿,則 web 伺服器會拒絕請求並處於 http 503繁忙狀態。如果是處理一些高延遲,例如網路操作,這樣的執行緒大多數只是等待狀態大部分時間是不做任何事情的,這樣的執行緒就可以使用非同步程式設計更好的充分利用。

場景描述一:如果某個請求生成乙個需要兩秒鐘來完成的網路呼叫,則該請求無論是同步執行還是非同步執行都需要兩秒鐘。 但是,在非同步呼叫的過程中,伺服器在等待第乙個請求完成的過程中不會阻塞對其他請求的響應。 因此,當有許多請求呼叫長時間執行的操作時,非同步請求可以防止出現請求排隊的情況。

場景描述二:假設我有三個操作,分別耗時500, 600和700毫秒。採用同步呼叫的話,總共的響應時間將會稍微超過1800毫秒。然而,如果是非同步呼叫(併發),總共響應時間將會稍微超過700毫秒,因為那是最長的任務/操作的持續時間。因此:當乙個action必須執行多個獨立的長期執行的操作時,非同步action方法是很有用的。

3.1、在滿足以下條件時使用同步管線:

1)、操作很簡單或執行時間很短。

2)、簡單性比效率更重要。

3)、此操作主要是 cpu 操作而不是包含大量的磁碟或網路開銷的操作。 對 cpu 繫結操作使用非同步操作方法未提供任何好處並且還導致更多的開銷。

3.2、在滿足以下條件時使用非同步管線:

1)、操作是網路繫結的或 i/o 繫結的而不是 cpu 繫結的。

並行性比**的簡單性更重要。

3)、您希望提供一種可讓使用者取消長時間執行的請求的機制。

4.1、既然非同步可以大大提**用程式的響應能力?那麼asp.net mvc 如果全部用非同步控制器(asynccontroller),會有什麼效果?會成為高吞吐量,高併發的**麼?

僅僅只是把**加個async事實上不會帶來任何效能的提公升,必須在需要非同步的地方(io)非同步執行才能真正提公升吞吐量。非同步controller多用於i/o密集型操作,比如讀寫資料,且操作之間較為獨立;而cpu密集型操作則不適用與非同步——無論你是非同步處理還是同步處理,最終cpu都會被頂滿。所以非同步操作確實可以達到提高併發數的效果,但具體還是要看你把它用在**。全部使用非同步controller並不會絕對達到提高站點效能的作用。

看stackoverflow大牛如何回答何時在asp.net中使用非同步控制器?

asp.net mvc中使用非同步控制器

asp.net mvc什麼時候使用非同步action

asp.net mvc 如果全部用非同步 controller,會有什麼效果?會成為高吞吐量,高併發的**麼?

Nios Flash程式設計技術

1.1 altera支援cfi flash程式設計 1.3 非支援cfi程式設計 由於我所用的nor flash晶元是am29lv320db,不再nios支援的列表,自己編輯了override檔案,但還是無法正確program進去,決定用列表支援的sst39vf800試一試,引腳相容,容量為1 4,...

DLL程式設計技術

一 dll原理 dll dynamic link library 也就是 動態鏈結庫 是乙個可以被其它應用程式共享的程式模組,其中封裝了一些可以被共享的程式或資源。它雖然包含了可執行 卻不能單獨執行,而應由相應的應用程式直接或間接呼叫。在 windows 32 中,可以將 dll 標記為共享以導致相...

多道程式設計技術

讓多個計算機問題同時裝入乙個計算機系統的主儲存器的併發執行,這種設計技術稱為 多道程式設計 這種計算機系統稱為 多道程式設計系統 或簡稱 多道系統 多道程式設計概念 所謂多道程式設計是指允許乙個計算機系統的主儲存器同時容納多個使用者程式,這些程式在計算機系統中可以併發執行。設有兩道程式a與b要在同乙...