线程池需要考虑

线程池需要考虑:
1. 添加工作任务
2. 查询工作任务是不是完成, wait/done/cannel_if
3. 结束/等/强杀 任务池
2指的是 对每一个工作任务的执行
如果再增强点就可以hook工作时间

服务器可以用来测试每一个任务的工作统计



 用户线程池主要有几个目的, 
添加任务,并可以等这个处理的处理结果,
定时的查询这个任务执行怎么样了,
手动清除了一个任务,
停止任务池时是否等所有加入队列的任务执行完 

#ifndef RPC_THREADPOOL_H
#define RPC_THREADPOOL_H


typedef struct rpc_tp rpc_tp_t;
typedef struct rpc_tp_worker rpc_tp_worker_t;


typedef void (* rpc_tp_complete_cb)(rpc_tp_worker_t * worker, void * opaque);
typedef void * (* rpc_tp_process_cb)(void * opaque);


typedef enum rpc_tp_state
{
	tp_state_idle = 0,
	tp_state_busy,
	tp_state_complete,
	tp_state_invalid,
} rpc_tp_state;


typedef enum rpc_tp_kill
{
	tp_kill_immediate,
	tp_kill_wait
} rpc_tp_kill;


#ifdef __cplusplus
extern "C" {
#endif


rpc_tp_t * rpc_tp_create(int nthreads);
rpc_tp_worker_t * rpc_tp_worker_add(rpc_tp_t * pool, rpc_tp_process_cb process_cb, void * opaque, rpc_tp_complete_cb complete_cb);
rpc_tp_state rpc_tp_worker_touch(rpc_tp_worker_t * worker);
void * rpc_tp_worker_wait(rpc_tp_worker_t * worker);
void rpc_tp_worker_free(rpc_tp_worker_t * worker);
void rpc_tp_destroy(rpc_tp_t * pool, rpc_tp_kill type);


#ifdef __cplusplus
}
#endif


#endif

#include "rpc_threadpool.h"


void * process_cb(void * opaque)
{
	int taskid;
	taskid = (int)opaque;
	printf("taskid = %d.\n", taskid);
	Sleep(2000);


	return NULL;
}


void complete_cb(rpc_tp_worker_t * worker)
{
	rpc_tp_worker_free(worker);
}


int main()
{
	rpc_tp_t * pool;


	pool = rpc_tp_create(5);


	{
		rpc_tp_process_cb pcb;
		rpc_tp_complete_cb ccb;
		void * opaque;
		int tasks;


		pcb = process_cb;
		ccb = complete_cb;


		for (tasks = 0; tasks < 19; tasks++)
		{
			rpc_tp_worker_t * worker;
			rpc_tp_state state;
			void * result;


			opaque = (void *)tasks;
			worker = rpc_tp_worker_add(pool, pcb, opaque, ccb);
			state = rpc_tp_worker_touch(worker);


			result = NULL;
			//result = rpc_tp_worker_wait(worker);
		}


		rpc_tp_destroy(pool, tp_kill_wait);
		printf("destory ok.\n");
	}
}



喜欢技术交流,不喜欢索要免费啤酒的,实现细节可以讨论

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值