pthread pool,POSIX的執行緒池實現

2021-10-01 20:40:59 字數 3085 閱讀 9110

執行緒池,根據命令列引數,傳遞連線的埠號,執行緒個數,任務個數(即連線次數)

可以測試server的併發

#include

#include

#include

#include

#include

#include

#include

#include

#include

//任務鍊錶結點

typedef

struct worker

cthread_worker;

//執行緒池結構

typedef

struct

cthread_pool;

intpool_add_worker

(void*(

*process)

(void

* arg)

,void

* arg)

;void

*thread_routine

(void

* arg)

;//全域性變數,定義乙個執行緒池指標

static cthread_pool* pool =

null

;//執行緒池初始化

void

pool_init

(int max_thread_num)

}//往任務鍊錶中新增任務結點

intpool_add_worker

(void*(

*process)

(void

* arg)

,void

* arg)

else

assert

(pool->queue_head !=

null);

//任務個數+1

pool->cur_queue_size++

;//解鎖

pthread_mutex_unlock

(&pool->queue_lock)

;//喚醒至少乙個執行緒

pthread_cond_signal

(&pool->queue_ready)

;return0;

}//銷毀執行緒池

intpool_destroy()

free

(pool->threadid)

; cthread_worker*head=

null

;while

(pool->queue_head!=

null

)pthread_mutex_destroy

(&pool->queue_lock)

;pthread_cond_destroy

(&pool->queue_ready)

;free

(pool)

; pool=

null

;return0;

}//執行緒函式

void

*thread_routine

(void

* arg)

//如果要關閉執行緒池

if(pool->shutdown)

printf

("pthread_self = %lu is starting work cur_queue_size =%d\n"

,pthread_self()

,pool->cur_queue_size)

;assert

(pool->cur_queue_size!=0)

;assert

(pool->queue_head!=

null);

//任務鍊錶結點個數-1

pool->cur_queue_size--

;//取得任務煉表頭結點

cthread_worker*worker=pool->queue_head;

pool->queue_head=worker->next;

//解鎖

pthread_mutex_unlock

(&pool->queue_lock)

;//? 執行任務函式(*

(worker->process)

)(worker->arg)

;//釋放該任務結點

free

(worker)

; worker=

null;}

pthread_exit

(null);

}//任務函式

void

*myprocess

(void

*arg)

char buf[30]

=;sprintf

(buf,

"this is %lu\n"

,pthread_self()

);if(

write

(sock,buf,

strlen

(buf))!=

strlen

(buf)

) r =

read

(sock,buf,

sizeof buf)

; buf[r]

='\0'

;printf

("pthread_self = %lu read: %s\n"

,pthread_self()

,buf)

;close

(sock)

;usleep(5

);//sleep(1);

return

null;}

intmain

(int argc,

char

* ar**)

pool_init

(atoi

(ar**[2]

));int port =

atoi

(ar**[1]

);int worknum =

atoi

(ar**[3]

);for(

int i =

0; i < worknum;

++i)

pool_destroy()

;return0;

}

springboot 中多執行緒 執行緒池如何實現

1.概念理解 多執行緒和非同步呼叫之前一直不理解有什麼區別,發現,這兩個是一件事情的不同角度,多執行緒是方法,非同步是目的 在springboot 可以通過註解 async 搞定。執行緒池 執行緒池引入的目的是為了解決 多次使用執行緒意味著,我們需要多次建立並銷毀執行緒。而建立並銷毀執行緒的過程勢必...

python 執行緒池 Python的執行緒池

usr bin env python coding utf 8 concurrent 用於執行緒池和程序池程式設計而且更加容易,在python3.2中才有。import sys from concurrent.futures import threadpoolexecutor,as complete...

執行緒 執行緒池

執行緒池是一種多執行緒處理形式,處理過程中將任務新增到佇列,然後在建立執行緒後執行,主要實現 建立執行緒和管理執行緒,並且給執行緒分配任務。執行緒池中的執行緒是併發執行的。乙個比較簡單的執行緒池至少應包含執行緒池管理器 工作執行緒 任務列隊 任務介面等部分。其中執行緒池管理器的作用是建立 銷毀並管理...