linux线程池的实现-线程的单例模式(懒汉饿汉模式)

本文介绍了Linux线程池的概念、作用和应用场景,强调了线程池能有效避免资源耗尽和提高CPU利用率。讨论了线程池的实现,包括线程安全的任务队列和自适应线程数量的管理。同时,文章还探讨了线程池的单例模式,分别阐述了饿汉模式和懒汉模式,并分析了它们的优缺点以及线程安全的实现方法。
摘要由CSDN通过智能技术生成

线程池:一个或多个线程+任务队列;
为什么要有线程池:一个程序起来以后立即启动了很多线程然后取处理任务,如果每来
一个请求都创建一个线程线程占资源,如果一瞬间来了很多请求会把资源耗尽程序奔溃了
应用场景:(1)启动线程处理任务请求,若同一时间因为大量请求创建大量线程有可能导致资源耗尽程序奔溃(需要限制上限)(2)创建线程(t1)+t2(处理任务时间)+t3销毁线程=总花费时间t
t1+t3/t线程创建销毁占的时间比例,如果占的时间比例特别高,大量时间用于创建线程销毁cpu利用率低,解决方法:一开始就创建一堆线程一直不退出,让他们去处理请求
功能:(1)避免峰值压力导致资源耗尽(2)避免大量线程的创建/销毁成本
任务队列:缓冲区,任务交给线程,
如何实现:线程创建和线程安全的任务队列实现+向队列添加任务
线程会从任务队列拿取数据,所以这个任务队列要保证线程安全
C++中stl容器:std::queue实现
成员:std:queue _list任务队列
_cap数量上限
mutex保证安全
Fcond队列为满
Empty队列为空
大量的线程线程的个数intmax_thr最大线程数量
自适应线程:一开始不创建线程,有任务来了查看现在有么有空闲的线程,如果没有创建线程,但是有最大数量上限,如果这些线程在一定的时间段内一直得不到任务(特别闲)为了省资源会让这些线程满满逐一退出,暂时省下资源了
直接创建固定线程:
成员函数里面:queuepush queuepop addtask(添加任务)
创建线程池的时候这些线程的入口函数一样(内部逻辑一样意味着他们只能处理相同的任务代表 一类线程池只能处理一类任务如果任务种类比较多久难以实现了),
Eg:线程处理文本图片和语言,处理方式稍微有不同,入口函数不同,从一个任务队列拿数据可能出错如何解决?
为了通用性着想处理不同请求:不应该直接放在线程的入口函数里面去处理也就是任务的处理方法由任务的本身决定
所以还需

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值