多執行緒與併發伺服器設計 23 2

2021-06-19 01:38:43 字數 1148 閱讀 3057

非同步i/o

常見併發伺服器方案

linux能同時啟動多少個執行緒?

對於 32-bit linux,乙個程序的位址空間是 4g,其中使用者態能訪問 3g 左右,而乙個執行緒的預設棧 (stack) 大小是 10m,心算可知,乙個程序大約最多能同時啟動 300 個執行緒左右。

多執行緒能提高併發度嗎?

如果指的是「併發連線數」,不能。

假如單純採用 thread per connection 的模型,那麼併發連線數大約300,這遠遠低於基於事件的單執行緒程式所能輕鬆達到的併發連線數(幾千上萬,甚至幾萬)。所謂「基於事件」,指的是用 io multiplexing event loop 的程式設計模型,又稱 reactor 模式。

多執行緒能提高吞吐量嗎?

對於計算密集型服務,不能。

如果要在乙個8核的機器上壓縮100個1g的文字檔案,每個core的處理能力為200mb/s,那麼「每次起8個程序,乙個程序壓縮乙個檔案」與「只啟動乙個程序(8個執行緒併發壓縮乙個檔案)」,這兩種方式總耗時相當,但是第二種方式能較快的拿到第乙個壓縮完的檔案。

多執行緒能提高響應時間嗎?可以

多執行緒如何讓i/o和計算重疊

多執行緒程式如何讓i/o和計算重疊,降低latency(遲延)

例:日誌(logging),多個執行緒寫日誌,由於檔案操作比較慢,服務執行緒會等在io上,讓cpu空閒,增加響應時間。

解決辦法:單獨用乙個logging執行緒負責寫磁碟檔案,通過blockingqueue提供對外介面,別的執行緒要寫日誌的時候往佇列一塞就行,這樣服務執行緒的計算和logging執行緒的磁碟io就可以重疊。

如果非同步i/o成熟的話,可以用protator模式。

執行緒池大小的選擇

如果池中執行任務時,密集計算所佔時間比重為p(0執行緒分類

i/o執行緒(這裡特指網路i/o)

計算執行緒

第三方庫所用執行緒,如logging,又比如database

併發伺服器模型 多執行緒伺服器

coding utf 8 from socket import from threading import thread from time import sleep 處理客戶端的請求並執行事情 def dealwithclient newsocket,destaddr while true rec...

C 多執行緒 非同步程式設計與併發伺服器

一 多執行緒和非同步的區別 多執行緒和非同步操作兩者都可以達到避免呼叫執行緒阻塞的目的。但是,多執行緒和非同步操作還是有一些區別的。而這些區別造成了使用多執行緒和非同步操作的時機的區別。當需要執行i o操作時,使用非同步操作比使用執行緒 同步 i o操作更合適。i o操作不僅包括了直接的檔案 網路的...

多執行緒併發構建基礎伺服器

threading的多執行緒併發 對比多程序併發 消耗資源較少 執行緒應該更注意共享資源的操作 在python中應該注意gil問題,網路延遲較高,執行緒併發也是一種可行的方法 實現步驟 1.建立套接字,繫結監聽 2.接收客戶端請求,建立新的執行緒 3.主線程繼續接收其他客戶端連線 4.分支執行緒啟動...