线程池

线程池(一种线程使用模式):至少包含有一个线程+任务队列,也就是一个线程也可以组成一个线程池
线程池有什么用?
应用场景,双十一,在淘宝买东西,
给服务器发送请求,一瞬间几百万个请求就过去了,淘宝创建线程去处理请求,你不可能创建几百万个线程,大量线程的创建有可能瞬间耗光资源,服务器就崩溃了,也就是说创建线程也得有个上限,但是这些请求怎么办?这么多线程只能处理这么多,其余的只能丢掉了,所以就得有地方能够保存起来,就是把请求缓冲起来。在线程池中设定一个最大线程数量,这些线程不断从队列中取任务进行处理,避免了大量线程被创建有崩溃的风险,也避免了请求丢失的问题,但任务队列也是有上限的,但是任务队列的消耗比创建线程的代价要小。

创建一个线程去处理任务,任务处理完,线程退出,假如创建线程消耗时间t1,处理任务用t2,销毁线程用t3,如果处理任务的时间有很短,而t1和t3的时间又很长,这时是性能上的损失,因为一个线程大部分的时间都用来创建和销毁了,不划算。最好的做法就是提前把线程创建好,这些线程并不退出,而是一直从任务队列中取数据进行处理,这样做的话就避免了线程的创建和销毁成本。
线程池的作用:
1、避免为大量请求创建线程,导致瞬间资源耗尽程序崩溃的问题。
2、避免大量线程频繁创建销毁所带来的时间成本
在程序初始化时,创建固定数量的线程(有最大数量限制),从任务队列中获取任务,进行处理。

线程池的实现:都是消费者线程,线程创建+线程安全的任务队列。
一个线程处理一种任务,如何让线程各自做不同的工作(如果线程池里的线程都处理相同的任务的话,那就得创建多个线程池,消耗更多资源,不划算)?就是根据任务不同做不同的处理?函数指针。

代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值