為什麼要使用執行緒池:因為執行緒的建立和銷毀佔了大量的cpu等系統資源,使用執行緒池可以解決這種情況,提高伺服器的效能。
執行緒池的思想:(1)先在記憶體中開闢出一些數目固定的執行緒。(2)當請求到達時,從執行緒池中選擇乙個空閒的執行緒來服務,服務完成時,執行緒放入執行緒池。(3)當請求到答時,將請求放到任務佇列中,等有空閒的執行緒時處理。
**使用c++實現的:
1、使用互斥鎖,來保證了執行緒安全。
2、使用訊號量,來控制當沒有請求到來時,執行緒處於等待。
3、建立執行緒時,執行緒的入口函式,需要宣告為靜態的,因為類的成員函式,不能作為執行緒建立的引數,因為pthread_create需要的引數型別為void*(*)(void*),而類的成員函式的型別為void*(threadpool::)(void*),引數型別不匹配。需要宣告為靜態的,那麼類的成員函式就不帶this指標,引數就匹配了。而且新
執行緒要用到其他類的成員函式和成員變數,需要顯示的把this指標傳進去。
#includeusing namespace std;
#include#include#include#include#includeclass mutexlock
void lock()
void unlock()
~mutexlock()
private:
pthread_mutex_t mutex;
};class sem
void wait()
void post()
~sem()
private:
sem_t s;
};templateclass threadpool
}int threadnums; //執行緒的數目
int requestqueue; //請求佇列的大小
pthread_t* threadbuf; //用來r存放執行緒id
queueq; //請求佇列
mutexlock ml; //互斥鎖
sem sem; //訊號量
bool flag; //判斷主程序有沒有退出
}; templatevoid* threadpool::start_routine(void* arg) //執行緒開始執行的函式
int main()
實現執行緒池
1.執行緒池優點 1 減少建立和銷毀執行緒的次數 2 可以根據系統的能力,調整執行緒池中線程的數目 3 減少切換執行緒的開銷 2.實現自定義執行緒池 思路 public class threadpool extends threadgroup 加入任務 public synchronized voi...
c 執行緒池實現(四)執行緒池實現
前面已經說到了同步佇列的實現,下面來看執行緒池的實現。ifndef include threadpool define include threadpool include include include include include syncqueue.hpp namespace mythrea...
Python的執行緒池實現
實現 coding utf 8 import queue import threading import sys import time import urllib 替我們工作的執行緒池中的執行緒 class mythread threading.thread def init self,workq...