執行緒池的設計與測試

2021-06-09 21:22:12 字數 2565 閱讀 8938

編寫了乙個最基本的執行緒池類,處理用c_work表示的工作任務。c++還很不熟練,歡迎會c++的提出寶貴的修改意見。

程式有注釋,所以應該很好讀懂。測試程式在下面。

[cpp]view plain

copy

print?

///

//執行緒池類

///

#include

#include

#include

#include

#include

const

int default_max_thread_num = 10;

const

int max_work_num = 100000;

//c_worker類

class c_work

c_work(void *(*prcss)(void *), void *arg):

process(prcss), arg(arg), next(null) {}

~c_work();

void *(*process)(void *);

void *arg;

unsigned char type; //最高位表示arg是否需要delete操作

c_work *next;

}; c_work::~c_work() }

class c_thread_pool

; c_thread_pool::c_thread_pool() }

c_thread_pool::c_thread_pool(int max_thread_num) }

/*向執行緒池中的任務佇列加入任務*/

int c_thread_pool::add_work(c_work work)

else

cur_queue_size++;

pthread_mutex_unlock(&queue_lock);

/*等待佇列中有任務了,喚醒乙個等待執行緒,注意如果所有執行緒都在忙碌,這句沒有任何作用*/

pthread_cond_signal(&(queue_cond));

printf("add work returned!\n");

return 0;

} void* c_thread_pool::thread_routine(void *arg)

//等待佇列長度減去1,並取出鍊錶中的頭元素

if (pool->cur_queue_size > 0 && pool->queue_head != null)

else

//不可達 }

} c_thread_pool::~c_thread_pool()

delete threadid; }

///

//執行緒池類

///#include #include #include #include #include const int default_max_thread_num = 10;

const int max_work_num = 100000;

//c_worker類

class c_work

c_work(void *(*prcss)(void *), void *arg):

process(prcss), arg(arg), next(null) {}

~c_work();

void *(*process)(void *);

void *arg;

unsigned char type; //最高位表示arg是否需要delete操作

c_work *next;

};c_work::~c_work()

}class c_thread_pool

;c_thread_pool::c_thread_pool()

}c_thread_pool::c_thread_pool(int max_thread_num)

}/*向執行緒池中的任務佇列加入任務*/

int c_thread_pool::add_work(c_work work)

else

cur_queue_size++;

pthread_mutex_unlock(&queue_lock);

/*等待佇列中有任務了,喚醒乙個等待執行緒,注意如果所有執行緒都在忙碌,這句沒有任何作用*/

pthread_cond_signal(&(queue_cond));

printf("add work returned!\n");

return 0;

}void* c_thread_pool::thread_routine(void *arg)

//等待佇列長度減去1,並取出鍊錶中的頭元素

if (pool->cur_queue_size > 0 && pool->queue_head != null)

else //不可達

} }c_thread_pool::~c_thread_pool()

delete threadid;

}

mysql 執行緒池測試 MySQL執行緒池測試

mysql執行緒池 thread pool 的處理 在預設的mysql的連線模型中,乙個連線對應乙個mysql伺服器的執行緒來處理連線請求 很類似於oracle的專用伺服器連線 在某些情況這種配置可能會導致一些問題,比如以下情形 1,伺服器同時太多活動連線線程,而cpu個數有限,會導致context...

程序池 執行緒池效率測試

之前我們分別對計算密集型和io密集型任務,測試過多執行緒對執行效率的改進,下面我們依然分計算密集 檔案讀寫 網路請求三個部分,測試使用執行緒池 程序池如何改進執行效率 首先導入庫並定義三種任務的函式 import requests from bs4 import beautifulsoup impo...

執行緒池效能測試

eterfree執行緒池以乙個基於boost程式庫的執行緒池為參照執行緒池,分別在不同硬體 不同作業系統的計算機對兩種執行緒池進行效能測試。用於效能測試的四台計算機,其配置資訊如表所示 cpu型號 cpu核心頻率 cpu核心數量 cpu執行緒數量 記憶體容量 作業系統 系統位數 intel core...