執行緒池 部分程式碼實現 筆記

2021-10-09 10:28:06 字數 1419 閱讀 3405

計算機中常用的池(池式結構)

記憶體池資料庫連線池

請求池訊息佇列(訊息池)

物件池緩衝區

執行緒池解決問題

非同步解耦的作用,如讀寫磁碟,檢測io

執行緒池三個部分

1 多個執行緒s

2 多個任務

3 管理元件

執行緒池部分程式碼

#include#include struct nworker 

;struct njob

;struct nmanager

;//使用頭插法增加任務,

#define ll_add(item,list) dowhile (0);

#define ll_remove(item,list) dowhile (0);

//靜態函式 只在本檔案有效

static void* nthreadcallback(void *arg)

if (worker->terminate)

struct njob* job = worker->pool->jobs;

ll_remove(job,worker->pool->jobs);

pthread_mutex_unlock(&worker->pool->jobs_mutex);

job->func(job->user_data);

} free(worker);

pthread_exit(null);

}typedef struct nworker nthreadpool;

//執行緒池初始化 numworkers 執行緒數量

int nthreadpoolcreate(nthreadpool *pool, int numworkers)

//一定要初始化

memset(worker, 0, sizeof(struct worker));

worker->pool = pool;

int ret = pthread_create(worker->thread, null,nthreadcallback,worker);

if (ret)

//每建立乙個執行緒 就把它加入執行緒池

ll_add(worker, pool->workers);

} return pool;

}int nthreadpooldestroy(nthreadpool* pool)

pthread_mutex_lock(&pool->jobs_mutex);

pthread_cond_broadcast(pool->jobs_cond);

pthread_mutex_unlock(&pool->jobs_mutex);

}void nthreadpoolpush(nthreadpool pool, struct njob *job)

mysql 執行緒池原始碼 執行緒池原始碼解析

1.前言 我個人覺得理論性的東西可能大家都懂,但是具體的實現細節可能並不是很清楚所以才想記錄一下,加深記憶。2.關鍵原始碼解析 1 ctl private final atomicinteger ctl new atomicinteger ctlof running,0 private static...

Tars原始碼分析 執行緒池實現

總結 前言tars底層實現了乙個執行緒池庫,主要源 位於tc thread poo.cpp,h 檔案中。執行緒池佇列涉及的核心是工作執行緒和任務佇列的設計。本文基於tars中的實現進行介紹。tc thread 執行緒池的工作執行緒類 threadworker 繼承自tc thread,它是tars實...

實現執行緒池

1.執行緒池優點 1 減少建立和銷毀執行緒的次數 2 可以根據系統的能力,調整執行緒池中線程的數目 3 減少切換執行緒的開銷 2.實現自定義執行緒池 思路 public class threadpool extends threadgroup 加入任務 public synchronized voi...