執行緒池,根據命令列引數,傳遞連線的埠號,執行緒個數,任務個數(即連線次數)
可以測試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...
執行緒 執行緒池
執行緒池是一種多執行緒處理形式,處理過程中將任務新增到佇列,然後在建立執行緒後執行,主要實現 建立執行緒和管理執行緒,並且給執行緒分配任務。執行緒池中的執行緒是併發執行的。乙個比較簡單的執行緒池至少應包含執行緒池管理器 工作執行緒 任務列隊 任務介面等部分。其中執行緒池管理器的作用是建立 銷毀並管理...