线程相关_线程池原理

一、定基调

线程池本质是一个资源管控模型,用池化技术和排队机制在系统开销和响应速度间找平衡。核心思想是:提前创建一批线程,复用它们执行多个任务,避免频繁创建和销毁线程的开销

二、将机制

  1. 核心线程常驻------保底处理能力
  2. 队列缓冲------任务先排队,能不扩线程就不扩
  3. 弹性扩张------只有队列满了才开临时工(非核心线程)
  4. 精准回收------临时工干完活,超时自动离职

三、埋钩子

  1. 为什么先排队后扩容?

    线程创建成本高,能复用就复用

  2. 为什么默认核心线程不回收?

    避免频繁创建销毁,稳定响应

  3. 为什么要有拒绝策略?

    系统要自我保护,不能无限制的接活

  4. 核心线程数设置多少?
    看任务是cpu密集还是IO密集

  5. 队列为什么用LinkedBlockingQueue?
    无界队列可能导致OOM

  6. 线程预热
    线程默认不预热,第一次任务来才创建线程,需要预热需要设置prestartAllCoreThreads

  7. 回收机制
    默认只回收非核心线程,想要核心线程的话,需要设置allowCoreThreadTimeoOut

四、架构为啥这样设计?

  1. 用核心线程低成本处理常态流量
  2. 用队列缓冲突发流量,观察是否持续
  3. 弹性扩容应付真实峰值
  4. 最后防线:拒绝策略防止系统被压垮

提交任务

┌──────────────────────┐

│ 当前线程数 < 核心线程数? │

└──────────────────────┘

│ 是 │ 否

▼ ▼

创建新线程执行任务 ┌────────────────┐

│ 任务队列未满? │

└───────────── ──┘

│ 是 │ 否

▼ ▼

放入队列等待 ────────────────────┐

│ 当前线程数 < 最大线程数? │

└───────────────────┘

│ 是 │ 否

▼ ▼

创建临时线程执行任务 执行拒绝策略

相关推荐
王小王-1238 分钟前
基于Python的车联网数据聚合与可视化分析平台设计与实现
python·车联网·新能源汽车·车联网聚合分析
拉勾科研工作室23 分钟前
区块链工程毕业论文题目【249个】
开发语言·javascript
叫我:松哥35 分钟前
基于Flask框架的校园二手书籍交易平台,注重校园场景的特殊需求,通过学号认证保障用户真实性
后端·python·sqlite·flask·bootstrap
namexingyun1 小时前
开源前端生态如何成为 AI UI 生成的“燃料“:shadcn/ui、Tailwind CSS、Storybook 技术价值全解剖
java·前端·人工智能·python·ui·开源·ai编程
通信仿真爱好者1 小时前
第【17】期--考虑硬件损伤和不完美CSI的RIS-MISO系统的深度强化学习联合优化-python完整代码+参考文献
python·深度强化学习·ris
装不满的克莱因瓶1 小时前
自然语言处理常见任务——从文本理解到生成式AI的完整任务体系
人工智能·pytorch·python·深度学习·ai·自然语言处理
z落落1 小时前
C#WinForm控件实战:Panel与单选框动态创建
开发语言·c#
ptc学习者1 小时前
python 中描述符@property property 大概的样子
开发语言·python
zmzb01031 小时前
Python课后习题训练记录Day129
开发语言·python
张忠琳1 小时前
【Go 1.26.4】Golang Map 深度解析
开发语言·后端·golang