关于线程池的设计和使用场景·浅析

线程池的设计

对于线程池可以有很对中设计,最常见的有master-slave模型,和通用线程池。
1. master-slave:一个主控线程和多个工作线程,线程池的调度由master线程来执行。
2. 通用线程池,如常见的半同步半异步线程池。线程池中的所有线程的地位平等,线程池的所有线程平等竞争池中的任务(variable_condition)
3. 设计线程池的原因:线程池的目的在于更大效率的使用线程(增大线程的利用率)

半同步半异步线程池

线程池的使用场景

一般的情况下,我们对线程池的设计遵循泛型的设计,就是可以向线程池中投递任意类型的task,这一点使用闭包(lambda)可以很容易就实现。线程池的使用场景更应该是task之间相互独立的情况下效率会更高。

设有如下场景:
	Resource A;
	threadpool thpool(10);//线程池中有10个线程.
	thpool.commit([]{
		A;//....使用资源A
		//.....
	});

	thpool.commit(
		A;//...
		//.....
		);

将两个task都投递到线程池,由两个线程得到task,执行,但是两个线程执行过程中都会涉及到对资源A的使用,那么此时
将在资源A产生资源竞争,就需要进行同步。其中某一个线程就需要等待,这大大减少了线程的利用率,特别是在资源竞争频繁的情况下。

所以,可以得到如下总结:线程池的设计是为了增大线程的使用效率,线程池适合task之间耦合性小(资源竞争小)的情景。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值