FreeOZ论坛

标题: 有没有成熟的可重用对象的pool的实现 [打印本页]

作者: justinli79    时间: 8-5-2009 17:47
标题: 有没有成熟的可重用对象的pool的实现
今天看了一下boost的pool的实现,发现只是为了提高小对象的频繁分配和释放的效率的。其实在实际操作中另外一个问题也是非常常见的,某种资源的对象的重复利用,比如数据库连接,线程等。有没有应用广泛的这种pool的实现?
作者: ritz    时间: 8-5-2009 18:10
我只知道java有很多db connection pool, 比如c3p0 http://sourceforge.net/projects/c3p0
这里有更多 http://java-source.net/open-source/connection-pools

太通用的估计很少,都是针对某一种资源的
作者: coredump    时间: 8-5-2009 18:15
http://threadpool.sourceforge.net/


http://www.codeproject.com/KB/cpp/StaticConnectionPool.aspx
作者: sliuhao    时间: 8-5-2009 18:19
Apache common pool.........
there is too much about this kind of opool....object pool....
作者: coredump    时间: 8-5-2009 18:21
原帖由 justinli79 于 8-5-2009 16:47 发表
今天看了一下boost的pool的实现,发现只是为了提高小对象的频繁分配和释放的效率的。其实在实际操作中另外一个问题也是非常常见的,某种资源的对象的重复利用,比如数据库连接,线程等。有没有应用广泛的这种pool的实 ...


严格地说, C++ 管理的是Object Pool, 具体这个Object表达的是db connection还是thread,还是单纯的内存是由这个Object对应的class定义的,所以结合C++的RAII,就能实现管理各种资源的要求。
作者: justinli79    时间: 8-5-2009 18:35
原帖由 coredump 于 8-5-2009 15:21 发表


严格地说, C++ 管理的是Object Pool, 具体这个Object表达的是db connection还是thread,还是单纯的内存是由这个Object对应的class定义的,所以结合C++的RAII,就能实现管理各种资源的要求。


是。 我希望有的是一个重用的概念,这个pool实现一个acquire和release方法,我需要用的时候就从pool里面借一个,用完就还回去。这样节省了从新申请resource和释放resource的时间。但是boost的pool解决的不是这种问题。
作者: coredump    时间: 8-5-2009 19:17
标题: 回复 #6 justinli79 的帖子
LS说的Apache pool就是满足你这样的需求的, 当然是Java的:
  1. public interface KeyedObjectPool {
  2.     Object borrowObject(Object key);
  3.     void returnObject(Object key, Object borrowed);
  4. }
复制代码

作者: yuba    时间: 8-5-2009 19:24
allocate和release resouce的情况各异,所以比较难有通用的实现

即使有,也需要自己实现申请和释放资源,才能适用通用的框架

很多情况下,pool是作为控制并发数量的方法

mysql5就说没有必要用pool,因为建立连接的开销极小,但是没有pool的话,高并发下连接数可能超出控制
作者: justinli79    时间: 8-5-2009 20:08
谢谢啊,不过楼上给的都是java的,我想要个c++的。
作者: coredump    时间: 8-5-2009 20:38
标题: 回复 #9 justinli79 的帖子
我给的都是c++的
作者: justinli79    时间: 11-5-2009 16:35
原帖由 coredump 于 8-5-2009 17:38 发表
我给的都是c++的


谢谢。 不过你给的不够general, 只能参考一下了。




欢迎光临 FreeOZ论坛 (https://www.freeoz.org/ibbs/) Powered by Discuz! X3.2