自己寫Http伺服器(四)新增執行緒池

2021-09-11 09:47:02 字數 820 閱讀 6925

在我們伺服器之前的那部分,我們通過建立執行緒讓執行緒去處理任務,從而可以在同一時間可以處理多個請求,但是這樣則需要我們頻繁的建立、銷毀執行緒,這樣在一定程度上會產生資源的損耗,影響我們伺服器的效率,其次如果短時間內的大量請求,導致伺服器建立執行緒數量過多,可能導致記憶體達到極限,影響作業系統中其他重要程序的執行

關於執行緒池:

首先我們先建立乙個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...