天天看點

同步和異步詳解

同步和異步

發送, 接收和回應操作可能是同步或者異步的,一項同步操作阻塞後面的流程知道這個操作結束。

一個異步的操作是非阻塞的,隻是初始化操作。 調用者可以通過其他機制來發現操作的完成請款。

同步操作需要了解什麼是操作完成。 在遠端任務中,發送方和接收方操作在資訊發送給接收者收到後結束,在遠端調用的情況下,發送,接收和回複完成判斷标準是确定接收方時間偶到回應,例如有一個傳回值。

另外,發送和接收結束在流程結束。 在流程執行過程中,發送方和接收方都在一個狀态。

注意:同步和異步意味着阻塞和非阻塞,反之并不适用,并不是所有的阻塞是同步,并不是所有的非阻塞是異步。例如,在接收機器接收到消息之前阻塞的發送是阻塞的,但不是同步的,因為接收程序可能沒有接收到消息。

異步消息傳遞允許更多的并發性。 因為一個程序不阻塞,在消息傳遞的過程中還可以做些其他的計算。對于接收方,這意味着可以同時接收不同端口的消息。在同步系統中,這種并行性可以通過為每個并發操作建立單獨的程序來實作,但是這種方法需要額外的程序管理成本。

這一費用對于低wps來說是可以承受的,而對于高wps來說則是不可承受的

異步消息傳遞引入了幾個問題。 如果消息不能發送怎麼辦? 發送放也許等不到确認,永遠也收不到回複報錯資訊。 同理,需要一種機制去提醒異步接收者一個消息已經到達了。操作調用者可以學習通過輪詢獲得完成或者報錯的資訊,

擷取軟體中斷,或者使用一個特殊的同步等待調用顯式地等待稍後完成,如果以後需要通知應用程式有關操作,異步操作需要傳回調用/事務id。在通知時,此id将被放置在某個全局位置,或作為參數傳遞給處理程式或等待調用

與異步消息傳遞相關的另一個問題與緩沖有關。如果異步發送的消息被緩沖在作業系統管理的空間中,那麼一個程序可能會用大量消息沖擊系統來填補這個空間