免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: epegasus
打印 上一主题 下一主题

大牛小牛都来讲讲内存池,线程池 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2009-04-02 16:10 |只看该作者
ThreadPool tp(3);   启动了这个线程池。
2处tp.push(...)向线程池发送任务。

[ 本帖最后由 die 于 2009-4-2 16:11 编辑 ]

论坛徽章:
0
22 [报告]
发表于 2009-04-02 16:32 |只看该作者
原帖由 jinmiaobis 于 2009-4-2 16:10 发表
刚写了个,是公司的不能发,还在测试性能,我的思路是先给各个子进程分配好内存,子进程先休眠,等主进程唤醒,这个不难.难在子进程的超时,僵死等的后续处理.

我的意思是,线程创建的时候所能执行的任务是不是已经确定了,那调度任何一个线程是不是都只能运行相同的功能,
还是说在调度的时候能传递给线程特定的参数,能运行特定的任务,而传递参数就是利用的所有线程共用的空间放置这种参数,比如一个函数指针,什么的.
其实开源的很多经典项目中都有进程池实现,但是代码过多,一时把这个看不明白.

论坛徽章:
0
23 [报告]
发表于 2009-04-02 16:56 |只看该作者
不管内存池、线程池、还是连接池。。应该都具备这些特点吧:
预先分配,先预分配好一定数量的对象,可以防止突然性的大并发请求,可以提升系统响应速度和负载能力。
缓存复用,使用完毕的对象可以暂时存储在池当中,以备被再利用。
方便管理,池中的对象本身做为一个对象是被总控线程监控和管理着的,想提升谁就提升谁,想灭谁就灭谁。。
还有哪些优点?..

论坛徽章:
0
24 [报告]
发表于 2009-04-02 17:02 |只看该作者
原帖由 epegasus 于 2009-4-2 15:09 发表
还是有个问题不清楚,一个线程创建好了,放在那里不运行的话,线程这个时候处于什么状态?
如果已经创建好了,那么对应的功能不是已经确定下来了吗?当调度运行的时候对其运行的代码还能改变吗?或者说调度的过程是什 ...



不需要定下来。丢个参数过去,让他按参数的要求动态选择执行就行了。
参数可以是函数指针,也可以是对象,比如策略模式中的策略。
我签名中的项目就有内存池和线程池。POSIX版和Windows版实现不一样。有两处bug修正后还没有release新版本,所以如果参考,请拉svn(可在线浏览)。

论坛徽章:
0
25 [报告]
发表于 2009-04-02 17:24 |只看该作者
池的方式实质上就是一个二级缓存概念,就像公司的设置了仓库部门,当员工需要使用办公用品的时候,仓管会先到仓库去看看有没有该办公用品,有就直接给,没有的话就去市场上采购后再给;当员工需要还回用品的时候,仓管会先看看仓库是否有空位保管,有就放进去,没有就当垃圾处理掉。

池的方式为什么会比较快,因为仓管员自己到二级缓存(池)中去分配用品开销小,到市场(全局)去购买再分配开销大,所以来的快。
内存池就是这样,外部需要使用内存的时候,池管理员会到池中去分配保管在池中的内存,该内存是直接使用,分配上来的最快;池管理员需要到全局内存中申请内存的时候,操作系统的MMU是个大仓库,寻找的范围大,寻找的时候(优化算法)还得考虑再三,速度自然慢了。

内存池除了速度快以为,还会有根据稳定和可靠的特征。池是工业级应用所常用的技术之一

池是一种资源分配策略,主要是用来对付那些速度分配/释放相对缓慢的资源,其二级管理方式理论上来说是最快的。
此外池还可以帮你建立起来稳定的资源应用环境,大大降低资源不足造成的异常情况的发生,程序的异常也就不容易被触发。
所以我们利用池来建立高性能、高稳定、高可靠的应用。

以前我们有句笑话说在“计算机上即使其他所有的应用软件崩溃了,我们的软件也不会崩溃”

[ 本帖最后由 凶悍的大灰狼 于 2009-4-2 17:41 编辑 ]

论坛徽章:
0
26 [报告]
发表于 2009-04-02 17:27 |只看该作者

回复 #1 epegasus 的帖子

论坛徽章:
0
27 [报告]
发表于 2009-04-02 17:32 |只看该作者
搞明白了池是什么概念后,你就知道被很多人说的神秘兮兮的内存池、线程池竟然是如此简单不过的东西
你可以不用超过十几行代码就可写出内存池模块

论坛徽章:
0
28 [报告]
发表于 2009-04-02 17:39 |只看该作者
原帖由 凶悍的大灰狼 于 2009-4-2 17:32 发表
搞明白了池是什么概念后,你就知道被很多人说的神秘兮兮的内存池、线程池竟然是如此简单不过的东西
你可以不用超过十几行代码就可写出内存池模块


内存池没这么容易写出来吧,
频繁的分配释放,单单内存整理就会搞出一堆东西来。。

论坛徽章:
0
29 [报告]
发表于 2009-04-02 17:44 |只看该作者

回复 #28 maxxfire 的帖子

内存池解决的就是频繁分配释放的问题,根本就无所谓的内存整理,关键要明白池的概念。
当然内存池功能的增强要做的事情可以更多
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

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

清除 Cookies - ChinaUnix - Archiver - WAP - TOP