很多公司裡,雇員通常會在辦公室度過他們的辦公時光(偶爾也會外出訪問客戶或**商),或是參加**展會。雖然外出可能很有必要,並且可能需要很多人一起去,不過對於一些特別的雇員來說,一趟可能就是幾個月,甚至是幾年。公司要給每個雇員都配一輛車,這基本上是不可能的,不過公司可以提供一些共用車輛;這樣就會有一定數量車,來讓所有雇員使用。當乙個員工要去異地旅遊時,那麼他就可以從共用車輛中預定一輛,並在返回公司的時候將車交還。如果某天沒有閒置的共用車輛,雇員就得不延後其旅程了。
執行緒池就是類似的一種方式,在大多數系統中,將每個任務指定給某個執行緒是不切實際的,不過可以利用現有的併發性,進行併發執行。執行緒池就提供了這樣的功能,提交到執行緒池中的任務將併發執行,提交的任務將會掛在任務佇列上。佇列中的每乙個任務都會被池中的工作執行緒所獲取,當任務執行完成後,再回到執行緒池中獲取下乙個任務。
建立乙個執行緒池時,會遇到幾個關鍵性的設計問題,比如:可使用的執行緒數量,高效的任務分配方式,以及是否需要等待乙個任務完成。
下面實現乙個執行緒池
typedef
std::function task;
typedef boundedblockingqueuetaskqueue;
typedef
std::function task;
typedef boundedblockingqueuetaskqueue;
class threadpool ;
threadpool::threadpool(size_t thread_num, size_t max_queue_size):thread_num_(thread_num), task_queue_(max_queue_size), running_(false)
threadpool::~threadpool()
}void threadpool::start()
}void threadpool::stop()
}void threadpool::run(const task& task)
bool threadpool::tryrun()
bool threadpool::empty() const
bool threadpool::running() const
task threadpool::take()
void threadpool::runthread()
}}
多執行緒 執行緒池
第一 降低資源消耗。通過重複利用已建立的執行緒降低執行緒建立和銷毀造成的消耗。第二 提高響應速度。當任務到達時,任務可以不需要等到執行緒建立就能立即執行。第三 提高執行緒的可管理性。執行緒是稀缺資源,如果無限制地建立,不僅會消耗系統資源,還會降低系統的穩定性,使用執行緒池可以進行統一分配 調優和監控...
多執行緒 執行緒池
執行緒池是什麼 執行緒池 thread pool 是一種基於池化思想管理執行緒的工具,經常出現在多執行緒伺服器中,如mysql。執行緒過多會帶來額外的開銷,其中包括建立銷毀執行緒的開銷 排程執行緒的開銷等等,同時也降低了計算機的整體效能。執行緒池維護多個執行緒,等待監督管理者分配可併發執行的任務。這...
多執行緒 執行緒池
執行緒池的作用 減少了每次建立 銷毀執行緒所帶來的損耗。執行緒池建立執行緒的簡易流程 文字描述 1 先判斷核心執行緒池 corepoolsize 是否已滿,沒滿就建立核心執行緒執行,滿了就進行下一判斷。2 判斷等待佇列 workqueue 是否已經滿了,沒滿就新增到等待佇列,滿了就進行下一判斷。3 ...