在我們伺服器之前的那部分,我們通過建立執行緒讓執行緒去處理任務,從而可以在同一時間可以處理多個請求,但是這樣則需要我們頻繁的建立、銷毀執行緒,這樣在一定程度上會產生資源的損耗,影響我們伺服器的效率,其次如果短時間內的大量請求,導致伺服器建立執行緒數量過多,可能導致記憶體達到極限,影響作業系統中其他重要程序的執行
關於執行緒池:
首先我們先建立乙個task類,用來存放我們需要處理的任務資訊
#define num 5
class threadpool
void unlockqueue()
bool isempty()
void threadidle()
void weakonethread()
static void* threadroutine(void* arg)
task t;
tp->poptask(t);
tp->unlockqueue();
log(info,"task has be taken, handler...");
t.run();}}
threadpool(int num = num)
:_thread_total_num(num),_thread_idle_num(0)
void initthreadpool()
}void pushtask(task &t)
void poptask(task &t)
~threadpool()
};
基本上執行緒池這部分就這麼些內容,在我們之前原來http伺服器的基礎上往往httpdserver類的基礎上加上執行緒池即可 自己寫HTTP伺服器(一)http協議
在寫http伺服器之前,我們首先要來了解一下http協議 在講http協議之前,我們先來說說url 一 url url就是我們平時俗稱的 網際網路上的每個檔案都有乙個唯一的url,它包含的資訊指出檔案的位置以及瀏覽器應該怎麼處理它。基本url包含模式 或稱協議 伺服器名稱 或ip位址 路徑和檔名,如...
自己手動寫http伺服器(2)
1 tringbuilder response new stringbuilder 2 1 http協議版本 狀態 描述4 2 響應頭 response head 8 正文長度 位元組長度 10 3 正文之前 1112 4 正文 1314 15system.out.println responsec...
自己動手寫http伺服器 執行緒池(一)
建立乙個執行緒池,每有乙個連線物件就將它新增到工作佇列中,執行緒池中的執行緒通過競爭來取得任務並執行它 它是通過訊號量實現的 filename threadpool.h ifndef threadpool h define threadpool h include include include i...