一般在web服務端使用執行緒池是比較常見的, 本節呢, 就已以實現乙個簡單的web服務端為目標, 僅僅實現get請求, 最多在加上post請求.
如果對web服務端並不熟悉的, 可以回過頭去看一下http請求與應答以及乙個500行左右的web服務端原始碼tinyhttpd(整理了原始碼以及修改和加注釋後的linux版本).
執行緒池完整**位置 : threadpool
因為執行緒池的**大概有1000行吧, 沒有辦法全部進行分析, 所以我就將部分重要的函式羅列出來以便大家看到時候能夠清楚.
這裡我們主函式的**貼上了一下, 打算用主函式的過程來分析整個簡單的流程.
初始化執行緒池.
將套接字監聽事件註冊到 epoll 監聽中.
有套接字監聽事件就緒, 以inithttpd
函式將其初始化.
客戶端傳送 http 請求後, 由readn
函式將請求複製到 httpd事件的讀緩衝區中.
主程序呼叫writen
函式將 httpd事件的寫緩衝區資料傳送給客服端, 完成一次應答.
// 讀事件就緒 :
// readn 將從緩衝區中將 http 請求讀入到 httdp 讀緩衝區中
else
if(evs[i]
.events & epollin)
// 寫事件就緒 :
// writen 將 http 狀態碼以及請求的靜態檔案傳送給客戶端
// 如果傳送過程**現問題則斷開連線
else
if(evs[i]
.events & epollout)}}
return0;
}
因為**有很多, 這裡也不好一一的講解, 所以還是希望有興趣的可以看一下原始碼, 也可以新增其他的功能(如 : 記憶體池等)實現成自己的小專案, 如果有問題也歡迎指出.
tinyhttpd 原始碼分析
執行緒 執行緒池
執行緒池是一種多執行緒處理形式,處理過程中將任務新增到佇列,然後在建立執行緒後執行,主要實現 建立執行緒和管理執行緒,並且給執行緒分配任務。執行緒池中的執行緒是併發執行的。乙個比較簡單的執行緒池至少應包含執行緒池管理器 工作執行緒 任務列隊 任務介面等部分。其中執行緒池管理器的作用是建立 銷毀並管理...
執行緒 執行緒池
乙個簡單執行緒的建立和銷毀如下 與程序程序相比,執行緒是一種輕量級的工具,但是輕量並不代表沒有,它的建立和關閉依然需要花費時間,如果建立和銷毀的時間還大於執行緒本身完成的工作,那就會得不償失,甚至會造成out of memory。即使沒有,大量的執行緒 也會給gc帶來巨大的壓力。為了解決這樣的問題,...
mysql 執行緒池 c MySQL執行緒池
mysql執行緒池 在麼mysql中,執行緒池指的是用來管理處理mysql客戶端連線任務的執行緒的一種機制。如果把執行緒看做系統資源那麼執行緒池本質上是對系統資源的管理,對應作業系統來說執行緒的建立和銷毀是比較消耗系統資源的,頻繁的建立與銷毀執行緒必然給系統帶來不必要的資源浪費,特別是在高負載的情況...