线程相关_线程池原理

一、定基调

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

二、将机制

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

三、埋钩子

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

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

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

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

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

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

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

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

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

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

四、架构为啥这样设计?

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

提交任务

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

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

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

│ 是 │ 否

▼ ▼

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

│ 任务队列未满? │

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

│ 是 │ 否

▼ ▼

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

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

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

│ 是 │ 否

▼ ▼

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

相关推荐
Sirius.z18 小时前
第R6周:LSTM实现糖尿病探索与预测
python
名字还没想好☜18 小时前
Python f-string 进阶:数字格式化、对齐填充、调试 = 号与嵌套表达式
开发语言·数据库·python·字符串格式化·f-string
·薯条大王19 小时前
经济实惠玩云服务器|一台云服务器多人共用,子账号配置教程
java·linux·运维·服务器·汇编·c++·python
Dxy123931021620 小时前
Python 如何使用 MySQL 的事务
python·mysql
一壶浊酒..1 天前
Scrape Webpack练习
开发语言·javascript·webpack
命运之光1 天前
【C语言完整代码】就诊信息管理系统
java·c语言·开发语言
命运之光1 天前
【C语言完整代码】图书管理系统:图书馆场景下的增删改查实战
c语言·开发语言
猿长大人1 天前
C# | Serilog 新手入门
开发语言·c#·.net·log
今儿敲了吗1 天前
Python ——第三方包
笔记·python
麒麟水手1 天前
国产银河麒麟系统开发实录:跑通Streamlit,我踩过的6个坑
python