对象池模式

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

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

3.对象池有什么特征?
通常来讲,对象池有下面几个特征:
(1)对象池中有必定数量已经建立好的对象
(2)对象池向用户提供获取对象的接口,当用户须要新的对象时,即可经过调用此接口获取新的对象。若是对象池中有事先建立好的对象时,就直接返回给用户;若是没有了,对象池还能够建立新的对象加入其中,而后返回给用户
(3)对象池向用户提供归还对象的接口,当用户再也不使用某对象时,即可经过此接口把该对象归还给对象池线程

4. 对象池如何实现?对象

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

相关文章
相关标签/搜索