线程池的实现

线程的应用——线程池

1.线程池的实现

1.1 线程池:一堆线程等待着处理任务——非常典型的生产者与消费者模型
1.2 组成:一堆线程(有最大数量上限)+线程安全的任务队列
其他线程将任务抛入线程安全的任务队列中,线程池中的线程从任务队列中获取任务进行处理。
1.3 应用场景:针对大量的请求进行处理的场景(如网络服务器……)
常规情况若要处理请求,使用单执行流效率较低,因此采用多执行流提高处理效率。
1.4 优势

  • 线程池中线程创建之后不销毁,而是循环取出任务进行处理,避免了频繁进行线程的创建与销毁带来的时间成本。
  • 线程池中的线程以及缓冲区有最大数量限制,避免了峰值压力下资源耗尽的风险。
    1.5 实现
    线程池的作用是针对大量的任务进行处理。

任务类型多种多样,但是线程入口函数是固定的;如何实现工作线程针对不同的任务进行不同的处理?
1.线程入口函数中分辨任务类型,调用不同的处理接口;
2.其他线程在通过任务队列传入任务时,将任务的处理方法一起传进来,线程池中的线程只需要使用处理方法去处理任务即可,不需要关注什么样的任务如何处理。

typedef void (*handler_t)(int data);
class ThreadTask{	//任务类
	int_data;	//要处理的数据
	handler_t_handler;	//处理数据的方法
public:
	void Run(){
	return_handler(_data);
	}
}任务节点类,线程池中的线程获取到任务节点只需要调用Run

class Threadpool{
	int thr_num;	//线程的数量
	BlockQueue_queue;	//线程安全的任务队列
	void*thr_entry(void *arg){
	ThreadTask data;
	_queue.pop(&data);
	data.Run();
	}
public:
	Init(int mq,int mt);	//初始化以及线程创建
	TaskPush(ThreadTask &task);	//任务入队
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值