acl  3.5.3.0
acl_pthread_pool.h 文件参考
#include "../stdlib/acl_define.h"
#include <time.h>
+ acl_pthread_pool.h 的引用(Include)关系图:
+ 此图展示该文件直接或间接的被哪些文件引用了:

浏览源代码.

struct  acl_pthread_pool_attr_t
 

宏定义

#define ACL_PTHREAD_POOL_DEF_THREADS   100
 
#define ACL_PTHREAD_POOL_DEF_IDLE   0
 
#define acl_pthread_pool_add   acl_pthread_pool_add_one
 

类型定义

typedef struct acl_pthread_job_t acl_pthread_job_t
 
typedef struct acl_pthread_pool_t acl_pthread_pool_t
 
typedef struct acl_pthread_pool_attr_t acl_pthread_pool_attr_t
 

函数

ACL_API acl_pthread_job_tacl_pthread_pool_alloc_job (void(*run_fn)(void *), void *run_arg, int fixed)
 
ACL_API void acl_pthread_pool_free_job (acl_pthread_job_t *job)
 
ACL_API acl_pthread_pool_tacl_thread_pool_create (int threads_limit, int idle_timeout)
 
ACL_API acl_pthread_pool_tacl_pthread_pool_create (const acl_pthread_pool_attr_t *attr)
 
ACL_API int acl_pthread_pool_set_timewait (acl_pthread_pool_t *thr_pool, int timewait_sec)
 
ACL_API int acl_pthread_pool_atinit (acl_pthread_pool_t *thr_pool, int(*init_fn)(void *), void *init_arg)
 
ACL_API int acl_pthread_pool_atfree (acl_pthread_pool_t *thr_pool, void(*free_fn)(void *), void *free_arg)
 
ACL_API int acl_pthread_pool_destroy (acl_pthread_pool_t *thr_pool)
 
ACL_API int acl_pthread_pool_stop (acl_pthread_pool_t *thr_pool)
 
ACL_API void acl_pthread_pool_add_one (acl_pthread_pool_t *thr_pool, void(*run_fn)(void *), void *run_arg)
 
ACL_API void acl_pthread_pool_add_job (acl_pthread_pool_t *thr_pool, acl_pthread_job_t *job)
 
ACL_API void acl_pthread_pool_bat_add_begin (acl_pthread_pool_t *thr_pool)
 
ACL_API void acl_pthread_pool_bat_add_one (acl_pthread_pool_t *thr_pool, void(*run_fn)(void *), void *run_arg)
 
ACL_API void acl_pthread_pool_bat_add_job (acl_pthread_pool_t *thr_pool, acl_pthread_job_t *job)
 
ACL_API void acl_pthread_pool_bat_add_end (acl_pthread_pool_t *thr_pool)
 
ACL_API void acl_pthread_pool_set_poller (acl_pthread_pool_t *thr_pool, int(*poller_fn)(void *), void *poller_arg)
 
ACL_API int acl_pthread_pool_start_poller (acl_pthread_pool_t *thr_pool)
 
ACL_API int acl_pthread_pool_add_dispatch (void *dispatch_arg, void(*run_fn)(void *), void *run_arg)
 
ACL_API int acl_pthread_pool_dispatch (void *dispatch_arg, void(*run_fn)(void *), void *run_arg)
 
ACL_API int acl_pthread_pool_limit (acl_pthread_pool_t *thr_pool)
 
ACL_API int acl_pthread_pool_size (acl_pthread_pool_t *thr_pool)
 
ACL_API int acl_pthread_pool_idle (acl_pthread_pool_t *thr_pool)
 
ACL_API int acl_pthread_pool_busy (acl_pthread_pool_t *thr_pool)
 
ACL_API void acl_pthread_pool_set_schedule_warn (acl_pthread_pool_t *thr_pool, acl_int64 n)
 
ACL_API void acl_pthread_pool_set_schedule_wait (acl_pthread_pool_t *thr_pool, acl_int64 n)
 
ACL_API void acl_pthread_pool_set_qlen_warn (acl_pthread_pool_t *thr_pool, int max)
 
ACL_API int acl_pthread_pool_qlen (acl_pthread_pool_t *thr_pool)
 
ACL_API void acl_pthread_pool_set_stacksize (acl_pthread_pool_t *thr_pool, size_t size)
 
ACL_API void acl_pthread_pool_attr_init (acl_pthread_pool_attr_t *attr)
 
ACL_API void acl_pthread_pool_attr_set_stacksize (acl_pthread_pool_attr_t *attr, size_t size)
 
ACL_API void acl_pthread_pool_attr_set_threads_limit (acl_pthread_pool_attr_t *attr, int threads_limit)
 
ACL_API void acl_pthread_pool_attr_set_idle_timeout (acl_pthread_pool_attr_t *attr, int idle_timeout)
 

宏定义说明

◆ acl_pthread_pool_add

#define acl_pthread_pool_add   acl_pthread_pool_add_one

在文件 acl_pthread_pool.h120 行定义.

◆ ACL_PTHREAD_POOL_DEF_IDLE

#define ACL_PTHREAD_POOL_DEF_IDLE   0

缺省空间超时时间为 0 秒

在文件 acl_pthread_pool.h45 行定义.

◆ ACL_PTHREAD_POOL_DEF_THREADS

#define ACL_PTHREAD_POOL_DEF_THREADS   100

缺省最大值为 100 个线程

在文件 acl_pthread_pool.h43 行定义.

类型定义说明

◆ acl_pthread_job_t

在文件 acl_pthread_pool.h15 行定义.

◆ acl_pthread_pool_attr_t

线程池对象属性的结构类型定义

◆ acl_pthread_pool_t

线程池对象结构类型定义

在文件 acl_pthread_pool.h36 行定义.

函数说明

◆ acl_pthread_pool_add_dispatch()

ACL_API int acl_pthread_pool_add_dispatch ( void *  dispatch_arg,
void(*)(void *)  run_fn,
void *  run_arg 
)

以批处理方式进行任务的分发, 其内部其实是调用了 acl_pthread_pool_add_one()

返回
0: OK; -1: err

◆ acl_pthread_pool_add_job()

ACL_API void acl_pthread_pool_add_job ( acl_pthread_pool_t thr_pool,
acl_pthread_job_t job 
)

向线程池添加一个任务

参数
thr_pool{acl_pthread_pool_t*} 线程池对象,不能为空
job{acl_pthread_job_t*} 由 acl_pthread_pool_alloc_job 创建的线程任务

◆ acl_pthread_pool_add_one()

ACL_API void acl_pthread_pool_add_one ( acl_pthread_pool_t thr_pool,
void(*)(void *)  run_fn,
void *  run_arg 
)

向线程池添加一个任务

参数
thr_pool{acl_pthread_pool_t*} 线程池对象,不能为空
run_fn{void (*)(*)} 当有可用工作线程时所调用的回调处理函数
run_arg{void*} 回调函数 run_fn 所需要的回调参数

◆ acl_pthread_pool_alloc_job()

ACL_API acl_pthread_job_t* acl_pthread_pool_alloc_job ( void(*)(void *)  run_fn,
void *  run_arg,
int  fixed 
)

创建一个线程池的工作任务

参数
run_fn{void (*)(void*)} 在子线程中被调用的回调函数
run_arg{void*} run_fn 的回调参数之一
fixed{int}
返回
{acl_pthread_job_t*} 返回创建的工作任务

◆ acl_pthread_pool_atfree()

ACL_API int acl_pthread_pool_atfree ( acl_pthread_pool_t thr_pool,
void(*)(void *)  free_fn,
void *  free_arg 
)

添加注册函数,在线程退出立即执行此初函数

参数
thr_pool{acl_pthread_pool_t*} 线程池对象,不能为空
free_fn{void (*)(void*)} 工作线程退出前必须执行的函数
free_arg{void*} free_fn 所需要的参数
返回
{int} 0: OK; != 0: Error.

◆ acl_pthread_pool_atinit()

ACL_API int acl_pthread_pool_atinit ( acl_pthread_pool_t thr_pool,
int(*)(void *)  init_fn,
void *  init_arg 
)

添加注册函数,在线程创建后立即执行此初始化函数

参数
thr_pool{acl_pthread_pool_t*} 线程池对象,不能为空
init_fn{int (*)(void*)} 工作线程初始化函数, 如果该函数返回 < 0, 则该线程自动退出。
init_arg{void*} init_fn 所需要的参数
返回
{int} 0: OK; != 0: Error.

◆ acl_pthread_pool_attr_init()

ACL_API void acl_pthread_pool_attr_init ( acl_pthread_pool_attr_t attr)

初始化线程池属性值

参数
attr{acl_pthread_pool_attr_t*}

◆ acl_pthread_pool_attr_set_idle_timeout()

ACL_API void acl_pthread_pool_attr_set_idle_timeout ( acl_pthread_pool_attr_t attr,
int  idle_timeout 
)

设置线程池属性中线程空闲超时值

参数
attr{acl_pthread_pool_attr_t*}
idle_timeout{int} 线程空闲超时时间(秒)

◆ acl_pthread_pool_attr_set_stacksize()

ACL_API void acl_pthread_pool_attr_set_stacksize ( acl_pthread_pool_attr_t attr,
size_t  size 
)

设置线程池属性中的最大堆栈大小(字节)

参数
attr{acl_pthread_pool_attr_t*}
size{size_t}

◆ acl_pthread_pool_attr_set_threads_limit()

ACL_API void acl_pthread_pool_attr_set_threads_limit ( acl_pthread_pool_attr_t attr,
int  threads_limit 
)

设置线程池属性中的最大线程数限制值

参数
attr{acl_pthread_pool_attr_t*}
threads_limit{int} 线程池中的最大线程数

◆ acl_pthread_pool_bat_add_begin()

ACL_API void acl_pthread_pool_bat_add_begin ( acl_pthread_pool_t thr_pool)

开始进行批处理方式的添加任务, 实际上是开始进行加锁

参数
thr_pool{acl_pthread_pool_t*} 线程池对象,不能为空

◆ acl_pthread_pool_bat_add_end()

ACL_API void acl_pthread_pool_bat_add_end ( acl_pthread_pool_t thr_pool)

批处理添加结束, 实际是解锁

参数
thr_pool{acl_pthread_pool_t*} 线程池对象,不能为空

◆ acl_pthread_pool_bat_add_job()

ACL_API void acl_pthread_pool_bat_add_job ( acl_pthread_pool_t thr_pool,
acl_pthread_job_t job 
)

添加一个新任务, 前提是已经成功加锁, 即调用 acl_pthread_pool_bat_add_begin 成功

参数
thr_pool{acl_pthread_pool_t*} 线程池对象,不能为空
job{acl_pthread_job_t*} 由 acl_pthread_pool_alloc_job 创建的线程任务

◆ acl_pthread_pool_bat_add_one()

ACL_API void acl_pthread_pool_bat_add_one ( acl_pthread_pool_t thr_pool,
void(*)(void *)  run_fn,
void *  run_arg 
)

添加一个新任务, 前提是已经成功加锁, 即调用 acl_pthread_pool_bat_add_begin 成功

参数
thr_pool{acl_pthread_pool_t*} 线程池对象,不能为空
run_fn{void (*)(void*)} 当有可用工作线程时所调用的回调处理函数
run_arg回调函数 run_fn 所需要的回调参数

◆ acl_pthread_pool_busy()

ACL_API int acl_pthread_pool_busy ( acl_pthread_pool_t thr_pool)

获得当前线程池中的繁忙线程数

参数
thr_pool{acl_pthread_pool_t*} 线程池对象,不能为空
返回
{int} 返回线程池中的繁忙线程数,返回值 < 0 表示出错

◆ acl_pthread_pool_create()

ACL_API acl_pthread_pool_t* acl_pthread_pool_create ( const acl_pthread_pool_attr_t attr)

创建一个线程池对象

参数
attr{acl_pthread_pool_attr_t*} 线程池创建时的属性,如果该参数为空, 则采用默认参数: ACL_PTHREAD_POOL_DEF_XXX
返回
{acl_pthread_pool_t*}, 如果不为空则表示成功,否则失败

◆ acl_pthread_pool_destroy()

ACL_API int acl_pthread_pool_destroy ( acl_pthread_pool_t thr_pool)

销毁一个线程池对象, 成功销毁后该对象不能再用.

参数
thr_pool{acl_pthread_pool_t*} 线程池对象,不能为空
返回
{int} 0: 成功; != 0: 失败

◆ acl_pthread_pool_dispatch()

ACL_API int acl_pthread_pool_dispatch ( void *  dispatch_arg,
void(*)(void *)  run_fn,
void *  run_arg 
)

以单个添加的方式进行任务的分发

返回
0: OK; -1: err 注:worker_fn 中的第二个参数为ACL_WORKER_ATTR结构指针,由线程池的某个 工作线程维护,该结构指针中的成员变量 init_data 为用户的赋值传送变量, 如:数据库连接对象等。

◆ acl_pthread_pool_free_job()

ACL_API void acl_pthread_pool_free_job ( acl_pthread_job_t job)

释放由 acl_pthread_pool_alloc_job 创建的工作任务

参数
job{acl_pthread_job_t*}

◆ acl_pthread_pool_idle()

ACL_API int acl_pthread_pool_idle ( acl_pthread_pool_t thr_pool)

获得当前线程池中的空闲线程数

参数
thr_pool{acl_pthread_pool_t*} 线程池对象,不能为空
返回
{int} 返回线程池中的空闲线程数,返回值 < 0 表示出错

◆ acl_pthread_pool_limit()

ACL_API int acl_pthread_pool_limit ( acl_pthread_pool_t thr_pool)

获得当前线程池的最大线程数限制

参数
thr_pool{acl_pthread_pool_t*} 线程池对象,不能为空
返回
{int} 最大线程数限制值

◆ acl_pthread_pool_qlen()

ACL_API int acl_pthread_pool_qlen ( acl_pthread_pool_t thr_pool)

取得当前线程池全局队列中未处理的任务个数

参数
thr_pool{acl_pthread_pool_t*} 线程池对象,不能为空
返回
{int} 当前未处理的任务数,返回值 < 0 表示出错

◆ acl_pthread_pool_set_poller()

ACL_API void acl_pthread_pool_set_poller ( acl_pthread_pool_t thr_pool,
int(*)(void *)  poller_fn,
void *  poller_arg 
)

设置线程池 POLLER 调度函数,若要使用此功能,需要在用函数 acl_pthread_pool_create 后通过此函数设置调度函数,然后再 调用 acl_pthread_pool_start_poller 启动后台调度函数,该后台 调度函数会不断地调用 poller_fn (即用户的回调函数),用户可以 在回调函数里调用 acl_pthread_pool_add 将新任务添加进线程池中

参数
thr_pool{acl_pthread_pool_t*} 线程池对象,不能为空
poller_fn{int (*)(void*)} 循环检测任务队列的回调函数
poller_arg{void*} poller_fn 所需要的参数

◆ acl_pthread_pool_set_qlen_warn()

ACL_API void acl_pthread_pool_set_qlen_warn ( acl_pthread_pool_t thr_pool,
int  max 
)

当线程池中的任务发生堆积时,通过该函数设置任务队列堆积报警值

参数
thr_pool{acl_pthread_pool_t*} 线程池对象,不能为空
max{int} 任务队列堆积报警值

◆ acl_pthread_pool_set_schedule_wait()

ACL_API void acl_pthread_pool_set_schedule_wait ( acl_pthread_pool_t thr_pool,
acl_int64  n 
)

设置线程池中子线程等待任务的超时基准时间(毫秒)

参数
thr_pool{acl_pthread_pool_t*} 线程池对象,不能为空
n{acl_int64} 当该值 > 0 时,子线程等待任务的超时等待基准时间(毫秒)

◆ acl_pthread_pool_set_schedule_warn()

ACL_API void acl_pthread_pool_set_schedule_warn ( acl_pthread_pool_t thr_pool,
acl_int64  n 
)

设置线程任务调度超时警告的时间(毫秒)

参数
thr_pool{acl_pthread_pool_t*} 线程池对象,不能为空
n{acl_int64} 当该值 > 0 时,如果线程任务的调度时间超过此值则会记录警告日志(毫秒)

◆ acl_pthread_pool_set_stacksize()

ACL_API void acl_pthread_pool_set_stacksize ( acl_pthread_pool_t thr_pool,
size_t  size 
)

设置线程池中线程的堆栈大小

参数
thr_pool{acl_pthread_pool_t*} 线程池对象,不能为空
size{size_t} 线程创建时的堆栈大小,单位为字节

◆ acl_pthread_pool_set_timewait()

ACL_API int acl_pthread_pool_set_timewait ( acl_pthread_pool_t thr_pool,
int  timewait_sec 
)

当队列堆积的任务数大于空闲线程数的2倍时. 通过此函数设置添加任务的 线程休眠时间, 如果不调用此函数进行设置, 则添加线程不会进入休眠状态.

参数
thr_pool{acl_pthread_pool_t*} 线程池对象,不能为空
timewait_sec{int} 休眠 的时间值, 建议将此值设置为 1–5 秒内
返回
{int} 成功返回 0, 失败返回 -1

◆ acl_pthread_pool_size()

ACL_API int acl_pthread_pool_size ( acl_pthread_pool_t thr_pool)

获得当前线程池中的线程数

参数
thr_pool{acl_pthread_pool_t*} 线程池对象,不能为空
返回
{int} 返回线程池中的总线程数,返回值 < 0 表示出错

◆ acl_pthread_pool_start_poller()

ACL_API int acl_pthread_pool_start_poller ( acl_pthread_pool_t thr_pool)

启动一个线程池 POLLER 调度线程

参数
thr_pool{acl_pthread_pool_t*} 线程池对象,不能为空
返回
0 成功; != 0 失败, 可以对返回值调用 strerror(ret) 取得错误原因描述

◆ acl_pthread_pool_stop()

ACL_API int acl_pthread_pool_stop ( acl_pthread_pool_t thr_pool)

暂停一个线程池对象的运行, 停止后还可以再运行.

参数
thr_pool{acl_pthread_pool_t*} 线程池对象,不能为空
返回
{int} 0: 成功; != 0: 失败

◆ acl_thread_pool_create()

ACL_API acl_pthread_pool_t* acl_thread_pool_create ( int  threads_limit,
int  idle_timeout 
)

更简单地创建线程对象的方法

参数
threads_limit{int} 线程池中最大并发线程数
idle_timeout{int} 工作线程空闲超时退出时间(秒)
返回
{acl_pthread_pool_t*}, 如果不为空则表示成功,否则失败