NOTE

2.8 如何设计池化技术

1. 什么是池化技术 预先创建对象并存放到池子里,使用的时候从池子中获取对象而不是创建,使用结束把对象归还给池子而不是销毁 2. 为什么需要池化技术 - 频繁创建、销毁对象开销大 - 对象占用资源多,需要限制对象的数量否则会把资源耗尽 3. 池化技术的缺点 池化技术属于利用空间换时间,所以会消耗内存

系统设计创建于 更新于 historical

这是历史学习笔记,可能存在过时或不完整的理解。

1. 什么是池化技术

预先创建对象并存放到池子里,使用的时候从池子中获取对象而不是创建,使用结束把对象归还给池子而不是销毁

2. 为什么需要池化技术

  • 频繁创建、销毁对象开销大
  • 对象占用资源多,需要限制对象的数量否则会把资源耗尽

3. 池化技术的缺点

池化技术属于利用空间换时间,所以会消耗内存

4. 如何设计池化技术

关键四个参数:最小空闲对象数+最大空闲对象数+最大对象数+超时时间

  • 当前对象数<最小空闲对象数
    • 创建新的对象并放入对象池
  • 当前对象数>最小空闲对象数
    • 如果有有空闲对象,那么使用空闲对象
    • 如果没有空闲对象,
      • 如果当前对象数<最大空闲对象数,那么创建新的对象并放入对象池
      • 如果当前对象数>最大空闲对象数
        • 如果当前对象数<最大对象数,那么创建新的对象但不放入对象池,用完即销毁
        • 如果当前对象数>最大对象数,那么等待空闲对象
  • 对于>最小空闲对象数的那些空闲对象,当超过了超时时间那么销毁

4.1. 如何确定最大对象数

业务系统设计分析思路.md发布

  1. 计算单个对象所能支撑的QPS,参考压力测试.md(关联笔记尚未公开)
  2. 计算最大对象数 = 业务预估QPS/单个对象所能支撑的QPS + 一点富余量

4.2. 如何确定最大空闲对象数

如果存在突发流量,那么和最大对象数设置的一样;不存在则设置的小一点

4.3. 如何确定最小空闲对象数

4.4. 如何确定超时时间

4.5. 如何确定

5. 池化技术应用

5.1. 线程池

14.ThreadPool.md

5.2. 协程池

协程池.md(关联笔记尚未公开)

5.3. TCP连接池

如何设计TCP连接池.md

6. 参考