- 主题:关于FB2000使用DLM的问题
【 在 flyriver (忧郁的飞流直下) 的大作中提到: 】
: 用 dlopen() 的也不能省内存么?而不是在启动程序时由 ld 动态加载。
: 比如 100 个进程,只有 5 个进程用 dlopen() 加载了额外的 .so 文件,
: 其他的 95 个进程不再加载任何额外的 .so,这样也省不了内存?
如果是同一个.so,dlopen()多少次都一样啊
怎么可能节省下来呢?
加快程序启动倒是真的
: 【 在 KCN@smth.org (毒中之毒~生亦何欢,死亦何苦) 的大作中提到: 】
: : 1. 不能达到节省内存的目的。
: : 2. 可以加快程序启动,有可能节省CPU消耗。
--
FROM 166.111.168.8
【 在 flyriver (忧郁的飞流直下) 的大作中提到: 】
: 是这样的,原来的 FB 系统是把所有的功能都做到一个文件里面,即 bbsd。
: 后来 FB2K 做了一点改动,把系统维护菜单的所有功能单独编译成 admintool.so,
: 于是 bbsd 也小了一些。
: 设原来的 bbsd 为 bbsd1, 新的小一些的 bbsd 为 bbsd2。
: bbsd2 + admintool.so >= bbsd1 ?
: 原来的 100 个进程 100 * bbsd1,
: 新的为 95 * bbsd2 + 5 * (bbsd2 + admintool.so),
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
这里不对吧,应该是100 * bbsd2 + 1 * admintool.so吧
这个.so最后就一份在内存中啊
: 那么这两个哪个大,哪个小呢?
: 【 在 scz (小四) 的大作中提到: 】
: : 如果是同一个.so,dlopen()多少次都一样啊
: .................(以下省略)
--
FROM 166.111.168.8
【 在 quickmouse (碰猫死翘翘) 的大作中提到: 】
: 我想flyriver和我是一个意思,比如:
: 大部分用户使用的bbsd进程只有普通的功能,如阅读文章等等,
: 但是单独的一些管理功能以及特殊功能放在一个.so当中,仅仅
: 在部分用户使用过程当中才调用,是不是可以认为:
: 原来不使用DLM的bbsd集成了所有的功能,其大小大于普通功能的
: bbsd。虽然加上特殊功能.so后会比集成所有功能的bbsd要大,但大
: 部分的用户很少使用特殊功能。
: 这样可以达到所有在线用户占用的内存总量减小的效果?
这个啊,这个我倒是觉得可以节省下来,我前面说不能节省内存,
不是说这个地方,我是针对那个dlopen() vs. ld的来说的
: 【 在 scz (小四) 的大作中提到: 】
: .................(以下省略)
--
FROM 166.111.168.8
【 在 quickmouse (碰猫死翘翘) 的大作中提到: 】
: 看了你和KCN的文章,我倒是犯糊涂了,按KCN的说法,所有的代码正文段
: 都是share的,.so按你说的也是share的,如果说在.so当中基本上都是
我的意思是.so的代码段部分以及所有只读部分是共享的
可写部分当发生copy on write时就不是共享的了
所以如果这个.so中有大量copy on write情形,那不用也罢
: 自动变量或者malloc等内存分配,那岂不是无论如何DLM都没有优势?
: 毕竟从一个大站来考虑,所有的用户在同一时间使用上会覆盖所有功能。 :(
: 【 在 scz (小四) 的大作中提到: 】
: : 这个啊,这个我倒是觉得可以节省下来,我前面说不能节省内存,
: : .................(以下省略)
--
FROM 166.111.168.8