服務介面非同步較同步的優勢

2021-06-19 00:29:47 字數 832 閱讀 6756

考慮如下情況:a服務呼叫b服務的rpc介面。需要等待b服務的介面返回後,才能繼續執行後面的操作。即或者b服務的介面正常返回,或者b服務的介面超時或異常返回。一定要等到乙個確定的結果後,a服務的邏輯才能繼續往下走。

這種情況下,使用同步呼叫和非同步呼叫,似乎沒有太大的區別。因為無論a同步呼叫還是非同步呼叫b,都需要等待b的執行結果返回。對於呼叫a服務,而等待a服務結果的客戶端,他都需要等待大致相同的時間。

當b服務出現較多的超時時,a因為同步呼叫,而會出現處理佇列的阻塞,整個服務的平均處理時間會加長。但換成非同步呼叫,整個a服務的平均回包時間還是會加長,因為必須將對b呼叫的超時時間均攤到a的完整響應時間內。

如果有以下模型:

1  b(1)

3 2 1   a  =>    

2 b(2)

a端有乙個處理佇列,b端有兩個處理佇列。此時來三個請求:1,2,3。如果請求1調b時,b(1)正常處理,但未處理完。此時請求2被分到b(2),出了異常不返回了。

此時如果是同步呼叫,則a的第3請求不能被處理,只能在2後面等。如果2超時時間為10t,總的處理時間是10t+t = 12t。

如果是非同步呼叫,則1,2,3三個請求一次性全被b接收。之後進行分發。1在b(1)執行,2在b(2)執行。b(2)阻塞後,3會被分發到b(1)執行。這樣總的處理時間是:10t。

上面這種情況下,當b服務發生抖動時,非同步較同步有以下兩個好處:

(1)a的處理佇列不會出現阻塞和超時。

(2)a對b的呼叫超時,只會影響超時的那乙個請求,超時後面的請求不受影響。

可見非同步較同步,在正常情況下,效能相差不多。在異常的情況下,效能會好很多。

非同步的優勢需要兩個前提:佇列 + 多執行緒。

同步介面和非同步介面

1 定義 2 支付非同步介面3 理解 4 python 模擬測試非同步介面 order 下單介面 url localhost 1234 order create method post body response getorder 查詢訂單介面 url localhost 1234 order ge...

C foreach迴圈較for迴圈的優勢與劣勢

一 foreach迴圈的優勢 c 支援foreach關鍵字,foreach在處理集合和陣列相對於for存在以下幾個優勢 1 foreach語句簡潔 2 效率比for要高 c 是強型別檢查,for迴圈對於陣列訪問的時候,要對索引的有效值進行檢查 3 不用關心陣列的起始索引是幾 因為有很多開發者是從其他...

ajax的同步 非同步 jquery同步

同步請求將鎖住瀏覽器,使用者其它操作必須等待請求完成才可以執行。看下邊的js function 如果其它函式呼叫這個函式的時候我們會發現先alert last 之後再 alert msg msg 不是順序執行的,這是因為jquery ajax預設的是非同步的不等ajax執行完就繼續執行其餘 這樣的話...