zoukankan      html  css  js  c++  java
  • 对象池模式

    1.什么是对象池(Object Pool) ?
    池(Poo), 与集合在某种意义上有些相似。 水池,是一定数量的水的集合;内存池,是一定数量的已经分配好的内存的集合;线程池,是一定数量的已经创建好的线程的集合。那么,对象池,顾名思义就是一定数量的已经创建好的对象(Object)的集合。

    2.对象池是干什么的?
    举个生活中水池的例子,在没有水池的时候,每次用水,都要去很远的地方挑水;有了水池之后的,一次挑很多水来,放在水池蓄下来,这样以后的一段时间内,用水的时候就不用去挑了,直接从水池取就可以了。同样的道理,在C/C++的程序中,如果一种对象,你要经常用malloc/free(或new/delete)来创建、销毁,这样子一方面开销会比较大,另一方面会产生很多内存碎片,程序跑的时间一长,性能就会下降。这个时候,就产生了对象池。可以事先创建好一批对象,放在一个集合中,以后每当程序需要新的对象时候,都从对象池里获取,每当程序用完该对象后,都把该对象归还给对象池。这样,就会少了很多的malloc/free(new/delete)的调用,在一定程度上提高了系统的性能,尤其在动态内存分配比较频繁的程序中效果较为明显。

    3.对象池有什么特征?
    一般来说,对象池有下面几个特征:
    (1)对象池中有一定数量已经创建好的对象
    (2)对象池向用户提供获取对象的接口,当用户需要新的对象时,便可通过调用此接口获取新的对象。如果对象池中有事先创建好的对象时,就直接返回给用户;如果没有了,对象池还可以创建新的对象加入其中,然后返回给用户
    (3)对象池向用户提供归还对象的接口,当用户不再使用某对象时,便可通过此接口把该对象归还给对象池

    4. 对象池如何实现?

    只需要提供两个接口即可,用queue模拟一下。

  • 相关阅读:
    EasyDarwin开源平台直播架构
    EasyDarwin开源平台直播架构
    ffmpeg推送,EasyDarwin转发,vlc播放 实现整个RTSP直播
    ffmpeg推送,EasyDarwin转发,vlc播放 实现整个RTSP直播
    开源G711(PCMA、PCMU)/G726转AAC项目EasyAACEncoder
    开源G711(PCMA、PCMU)/G726转AAC项目EasyAACEncoder
    RTSP/RTMP/HLS/HTTP流媒体播放器EasyPlayer
    开源流媒体播放器EasyPlayer
    vs添加对dll的引用
    vs添加对dll的引用
  • 原文地址:https://www.cnblogs.com/Stomach-ache/p/4772970.html
Copyright © 2011-2022 走看看