对象池学习

Posted wangzhiyi

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了对象池学习相关的知识,希望对你有一定的参考价值。

概念

为了避免大量创建(构造)对象、销毁(析构)对象带的性能开销

设计

  • 对象队列
    • 初始化时,指定队列长度
    • 出队、入队操作需要加锁保护
    • 对象的构造
      • 在初始化对象池时构造好
      • 对象并不是一开始全部构造好,而是在获取对象的过程中构造(构造之后便保存在队列中供使用)
  • 获取对象
    • 提供接口
  • 归还对象
    • 提供接口,显示归还
    • 利用c++ RAII特性(即智能指针析构时,调用归还操作),隐式归还
  • 对象管理器
    • 负责构造对象与销毁对象
    • 管理每个对象的状态
  • 获取状态接口
    • 提供接口,用户可以获取对象池的各种状态信息

注意事项

  • 对象池的更新
    • 对象构造时可能需要特定的参数,运行时参数发生改变从而需要更新对象池时,需要 用户 保证在更新过程中访问对象操作的线程安全性,下面是一种方案(更新整个对象池实例):
      • 用户 使用智能指针持有对象池实例,并且使用读写锁保护其访问操作
        • 使用智能指针可以在更新操作发生后提供对原对象池实例的线程安全访问
        • 使用智能指针可以发生更新操作(加写锁,阻塞)时只执行智能指针的赋值
      • 用户 根据需要构造一个新的对象池实例,初始化成功后,加写锁替换原对象池实例

cpp object pool 项目

https://github.com/chenguang9239/generic_object_pool.git

以上是关于对象池学习的主要内容,如果未能解决你的问题,请参考以下文章

从使用到原理学习Java线程池

对象池方案总结

java/android 设计模式学习笔记---对象池模式

从使用到原理学习Java线程池

go语言学习--go的临时对象池--sync.Pool

java---连接池的学习