非同步非阻塞開發模式的優越性

2021-06-19 17:16:42 字數 1804 閱讀 5194

同步阻塞開發模式:

1. 服務端啟動監聽;

2. 接收到乙個客戶端連線時,申請乙個執行緒處理(可以是執行緒池,也能是直接啟動執行緒。)

3.然後是接收請求(接受請求時,執行緒阻塞在這裡),處理請求,如果需要依賴其他模組時,需要傳送訊息給其他系統。

4. 接收其他系統的應答(傳送請求和接收應答時會阻塞執行緒),然後處理應答,最後給客戶端傳送最後的應答(也會阻塞執行緒)

同步模式存在下面的問題:

1. 乙個連線的併發請求數非常有限,因為執行緒阻塞在那裡,前乙個請求需要等到應答後,才能傳送下乙個請求; 2.

連線數非常有限,因為每乙個連線需要占用乙個執行緒,當需要幾萬、幾十萬、上百萬的連線並存時,系統無法開啟那麼多執行緒; 3.

系統的併發效能依賴於響應時間,如果第三方系統故障無響應時,就可能有大批的執行緒被阻塞在那裡,知道超時後才能釋放,從而導致整體效能急劇下降; 4.

故障會擴散,區域性故障會擴散到整體,如果系統

1出現問題,訪問它的執行緒都會被阻塞,當某個流程不依賴系統

1,而是依賴系統

2,但是由於執行緒都阻塞在系統

1上,導致執行緒池執行緒用完,沒有執行緒來處理本來能夠正常處理的新請求。

非同步非阻塞開發模式:

1. 通訊線程與處理執行緒分離,通訊線程只負責客戶端連線的建立,訊息的接收傳送,請求由處理執行緒處理; 2.

通訊線程監聽客戶端的連線,請求接收,然後將請求訊息傳送到處理執行緒的訊息佇列;通訊使用

socket

非同步非阻塞模式,為了支援海量連線併發,

linux

下採用epoll

模式,windows

使用iocp

模式,網上有較多這方面的介紹,這裡不展開說明。 3.

通訊線程同時從自己的訊息佇列中取訊息,然後將訊息傳送到指定的客戶端中。 4.

處理執行緒從自己的訊息佇列中取出請求,建立會話,然後處理該請求,如果該流程依賴其他模組,可以將請求訊息傳送給其他系統(將訊息放到通訊線程的訊息佇列); 5.

掛起會話,讓會話等待其他系統應答,但是執行緒不阻塞,繼續從訊息佇列中取其他訊息處理。 6.

當其他系統的應答訊息來了時,通訊線程同樣將其傳送給處理執行緒的訊息佇列。 7.

處理執行緒從訊息佇列取出應答,然後查詢會話處理,最後將應答傳送給客戶端。

非同步非阻塞模式解決了同步模式存在的問題:

1. 單

連線的併發數提公升海量

,測試證明,光通訊

部分,乙個執行緒就可以處理幾萬、十幾萬的請求數。

2. 連線數大量提公升,使用

epoll

、iocp

後,連線數可以達到幾十萬,上百

w的數量級。 3.

系統的併發效能不依賴於響應時間,更不依賴其他模組的響應時間,對方響應慢,只會適當的使會話增多,內多多一些。 4.

也不會因為別的某個模組故障,導致整體系統不可用。

同步模式雖然簡單,初學者開發起來也基本能勝任,但是對於比較大的系統,併發要求比較高的系統,後續就經常會出現各種各樣的效能、可靠性等問題。

非同步模式雖然程式設計複雜一些,當效益很明顯,如果將非同步模式框架進行封裝後,對開發業務來說也是比較簡單的事情,關鍵還是要回前期的框架設計。

繁體字的優越性

筆者兩度赴中國大陸旅遊,對簡體字頗不習慣,也深覺不以為然,例如 乙個 幹 字,既可以作 幹 也可以作 幹 實在教人困惑!返台時,便以簡體字的缺陷,略帶詼諧語調,作對聯一則。上聯曰 面無麥 愛無心 單翅能飛 下聯曰 餘不食 親不見 無門可開 面無麥 中國大陸的 面 字,就用 面 字來代替,沒有左邊的 ...

非阻塞模式開發

接字的非阻塞模式是指套接字在執行操作時,呼叫的函式不管操作是否完成都會立即返回的工作模式。非阻塞套接字在處理同時建立的多個連線,傳送和接收的資料量不均,時間不定等方面具有明顯的優勢。但這種套接字在使用上存在一定難度。本章講述套接字的非阻塞模式及其乙個遠端算數運算套接字程式。所有windows 平台都...

分布式資料庫的優越性

分布式資料庫的優越性 從圖12 1 中可以看到,使用者可以通過任何乙個資料庫訪問所有 3個資料庫中的資料,而不必同時去連線 3個資料庫。分布式資料庫和資料複製型資料庫有一些關係,就是資料庫之間有關聯和相互資料訪問,但是它們的功能和目的是不同的,區別也確實顯而易見。就像前面說的那樣,分布式資料庫強調資...