利用NIO和執行緒池極大提公升網管通訊模組的訊息吞吐量

2021-08-31 05:20:32 字數 471 閱讀 8758

傳統模式:

[img]

nio + 執行緒池模式:

[img]

[b]優勢:[/b]

1、 減少了接收的執行緒數。

2、 利用執行緒池技術控制了處理執行緒的數量。

3、 從測試資料來看,訊息的吞吐量是極大的提公升,從原來的1000條/秒提公升到現在的10w條/秒。

[b]注意點:[/b]

1、 執行緒池技術時,要自己寫許多**來控制併發安全。

2、 nio有一些bug,列舉如下:

1、 socketchannel.close()有時候關不掉socket,需要多次關閉

2、 selector在登出和註冊監聽時,有時候不能立刻反映到程式中,需要自己在程式中適時的wakeup一下。

[b]應裴小星的要求,把我以前寫的乙個用nio收發訊息的demo傳上來(見src.zip)[/b]:入口程式:com.talent.nioclient(直接執行這個類就可以了)

執行緒池和程序池

動態建立程序 或執行緒 是比較耗費時間的,這樣導致較慢的客戶響應。動態建立的子程序 子執行緒 通常只用來為乙個客戶服務,這將導致系統上產生大量的細微程序 或執行緒 程序間的切換將消耗大量的cpu時間。動態建立的子程序是當前程序的完整映像,當前程序必須謹慎地管理其分配的檔案描述符和堆記憶體等系統資源,...

執行緒池和程序池

案例 模擬多個客戶端一同去訪問服務端,讓服務端支援多個客戶端訪問,從而實現併發效果 不考慮粘包問題 import socket from threading import thread server socket.socket def communicate conn 開始通訊 while true...

程序池和執行緒池

系統啟動乙個新執行緒的成本是比較高的,因為它涉及與作業系統的互動。在這種情形下,使用執行緒池可以很好地提公升效能,尤其是當程式中需要建立大量生存期很短暫的執行緒時,更應該考慮使用執行緒池。執行緒池在系統啟動時即建立大量空閒的執行緒,程式只要將乙個函式提交給執行緒池,執行緒池就會啟動乙個空閒的執行緒來...