[Linux] 实现简单的线程池

含义

线程池是一种线程使用模式

意义

线程过多会带来调度开销,进而影响缓存的局部性和整体性能;而线程池维护着多个线程,等待着管理者分配可并发执行的任务,避免了在处理短时间任务时创建与销毁线程的代价;线程池不仅能够保证内核的充分利用,还能防止过分调度。可用线程数量应该取决于可用的并发处理器、处理器内核、内存、网络sockets等的数量。

应用场景

  • 需要大量的线程来完成任务,且完成任务的时间比较短;
  • 对性能要求苛刻的应用,比如要求服务器迅速响应客户请求;
  • 接受突发性的大量请求,但不至于使服务器因此产生大量线程的应用。

线程池实例

1)实现逻辑

  • 创建固定数量的线程池,循环从任务队列中获取任务对象;
  • 获取到任务对象后,执行任务对象中的任务接口;
  • 即,实现有一个线程往任务队列里面塞任务,剩下的几个线程从任务队列里面拿任务进行处理。

2)代码实现

1. 创建Task任务类

class Task{
   
	public:
		int base;
	public:
		Task(){
   }
		Task(int _b):base(_b){
   }
		void Run(){
   
			cout << "Thread id [" << pthread_self() << "]" << "task run ... done: base #" << base << "  pow is #" << pow(base, 2) << endl;
		}
		~Task(){
   }
};

2. 创建线程池

创建线程池,实现其基本功能:
void Put(Task &in)----往任务队列里面往任务,然后唤醒消费者去拿任务
void Get(Task &out)----从任务队列里面拿任务
void ThreadPoolInit()----初始化一堆处理任务的线程
static void *Routine(void *arg)----从任务队列中拿任务,然后处理任务

class ThreadPool{
   
	private
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值