线程相关_线程池原理

一、定基调

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

二、将机制

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

三、埋钩子

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

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

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

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

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

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

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

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

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

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

四、架构为啥这样设计?

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

提交任务

│

▼

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

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

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

│ 是 │ 否

▼ ▼

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

│ 任务队列未满? │

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

│ 是 │ 否

▼ ▼

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

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

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

│ 是 │ 否

▼ ▼

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

相关推荐
VidDown12 小时前
24fps 转 25fps 不只是改个数字:帧率转换、PAL/NTSC 与音频补偿
python·网络协议·音视频·视频编解码·视频
死磕音视频14 小时前
让小模型做选择题:限定候选项并读取 logits 概率的入门实践(附 Python 代码)
开发语言·python·大模型·文本分类·transformers
凤山老林14 小时前
Spring Boot 接入国密 SM2/SM3/SM4 的一些实践记录
spring boot·后端·python
pride.li16 小时前
第03章 Python 教程-基础语法:注释与变量
服务器·前端·后端·python·算法·计算机视觉
databook16 小时前
用 Pydantic AI 从零搭建一个能干活的 AI Agent
人工智能·python
顽疲16 小时前
Java vue 养老系统源码详解:月账单 care_month_bill 与 Quartz 扣费 Job 实践
java·开发语言·vue.js·vue养老·springboot养老·java养老
康小旺16 小时前
把 markitdown 做成 Windows 桌面版:拖进文档就出 Markdown,附 233MB→64MB 打包裁剪全过程
python
Wang's Blog16 小时前
Java 项目实战: 交友项目 - 安装开发工具与环境准备
java·开发语言·交友
启观川17 小时前
数据结构与算法-第 3 章 常用算法-贪心算法
数据结构·笔记·python·算法·贪心算法
南笙北梦17 小时前
本地开源大模型多轮对话显存泄漏排查与修复实录
python