免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 5511 | 回复: 4
打印 上一主题 下一主题

关于用C/C++语言的对象池的实现 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2003-12-05 16:10 |只看该作者 |倒序浏览
现在做一个项目,可能运行时会生成好多对象,然后对这些对象的关联(不是COM里的那种引用计数)进行计数,不需要了就释放掉。为了提高性能想写类似于JBoss的对象池,怎样写这样的对象池呢?

初步的想法是这样的,有一个全局的对象池,里面有好多子对象池,子对象池是可以动态或能通过算法或外界控制生成和销毁的,子对象池应能保持一定的冗余度(里面总的对象个数比会使用到的稍微多一些)。整体看来应该是树形结构,哪位大侠能帮忙设计一下结构或有代码让我参考一下,提点设计的想法思路也行啊,不胜感激!

另外还应该有一个对象池的管理东东,管理对象池的大小(里面对象的个数),减小那些冗余度太大的的对象池或扩大冗余度不够的对象池;销毁不再使用的子对象池;在某个时刻创建新的子对象池或在别的某个适合的地方创建

论坛徽章:
0
2 [报告]
发表于 2003-12-05 17:07 |只看该作者

关于用C/C++语言的对象池的实现

内存分配器
104 struct apr_allocator_t {
105     apr_uint32_t        max_index;
106     apr_uint32_t        max_free_index;
107     apr_uint32_t        current_free_index;
108 #if APR_HAS_THREADS
109     apr_thread_mutex_t *mutex;
110 #endif /* APR_HAS_THREADS */
111     apr_pool_t         *owner;
112     apr_memnode_t      *free[MAX_INDEX];
113 };

池的结构
471 struct apr_pool_t {
472     apr_pool_t           *parent;
473     apr_pool_t           *child;
474     apr_pool_t           *sibling;
475     apr_pool_t          **ref;
476     cleanup_t            *cleanups;
477     apr_allocator_t      *allocator;
478     struct process_chain *subprocesses;
479     apr_abortfunc_t       abort_fn;
480     apr_hash_t           *user_data;
481     const char           *tag;
482
483 #if !APR_POOL_DEBUG
484     apr_memnode_t        *active;
485     apr_memnode_t        *self; /* The node containing the pool itself */
486     char                 *self_first_avail;
487
488 #else /* APR_POOL_DEBUG */
489     debug_node_t         *nodes;
490     const char           *file_line;
491     apr_uint32_t          creation_flags;
492     unsigned int          stat_alloc;
493     unsigned int          stat_total_alloc;
494     unsigned int          stat_clear;
495 #if APR_HAS_THREADS
496     apr_os_thread_t       owner;
497     apr_thread_mutex_t   *mutex;
498 #endif /* APR_HAS_THREADS */
499 #endif /* APR_POOL_DEBUG */
500 #ifdef NETWARE
501     apr_os_proc_t         owner_proc;
502 #endif /* defined(NETWARE) */
503 };
抛砖引玉啦,哪位大侠值点一下。

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
3 [报告]
发表于 2003-12-05 18:10 |只看该作者

关于用C/C++语言的对象池的实现

apache支持多线程的进程池的管理和你说的要求倒是很像。

你可以参考一下

论坛徽章:
0
4 [报告]
发表于 2003-12-09 14:18 |只看该作者

关于用C/C++语言的对象池的实现

楼上的大侠有apache server程序的设计或说明文档吗?可否传一份给我?谢过了先。我的邮箱:    hou.huawei@zte.com.cn

我看了一点apache http server的程序,感觉太过庞大,如果有结构性的设计或说明文档结合起来看一下的话,会受益匪浅,望大侠指点

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
5 [报告]
发表于 2003-12-09 18:51 |只看该作者

关于用C/C++语言的对象池的实现

我没有电子文档。

但是国内出版了两本关于APACHE的源码分析的书,你可以找找看。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP