线程相关_线程池原理

一、定基调

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

二、将机制

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

三、埋钩子

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

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

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

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

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

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

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

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

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

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

四、架构为啥这样设计?

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

提交任务

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

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

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

│ 是 │ 否

▼ ▼

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

│ 任务队列未满? │

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

│ 是 │ 否

▼ ▼

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

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

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

│ 是 │ 否

▼ ▼

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

相关推荐
麻瓜老宋11 分钟前
AI开发C语言应用按步走,表达式计算器calc的第一步,中缀表达式词法分析
c语言·开发语言·atomcode
灯澜忆梦1 小时前
GO_文件处理---字符串操作
开发语言·golang
-银雾鸢尾-1 小时前
里氏替换原则
开发语言·c#·里氏替换原则
এ慕ོ冬℘゜1 小时前
JavaScript 数组核心方法实战|新增元素 + 数组转字符串 零基础详解
开发语言·javascript·ecmascript
一个初入编程的小白1 小时前
C语言:函数栈帧与销毁
c语言·开发语言
czhc11400756631 小时前
718:public internl class;partial []
开发语言
smj2302_796826521 小时前
解决leetcode第3989题网格中保持一致的最大列数
python·算法·leetcode
临床数据科学和人工智能兴趣组1 小时前
R语言因其强大的统计功能、灵活的编程环境、活跃的社区支持和强大的R扩展包,迅速成为统计学和数据科学领域的首选工具之一
开发语言·数据分析·r语言·r语言-4.2.1
__log2 小时前
弱网环境下的“生命线“:从AI流式响应到大文件上传的稳定性
开发语言·人工智能·php
吴梓穆2 小时前
Python 基础 正则表达式
python