1
msg7086 2014-09-06 21:05:53 +08:00 via iPhone
Master载入词典以后不就可以给子进程共享了?
|
3
SErHo 2014-09-06 21:41:08 +08:00 1
|
4
aszxqw OP @SErHo
似乎不行,编译过不去。 ``` /tmp/ngx_http_cppjieba_module/src/ngx_http_cppjieba_module.cpp:121:1: error: invalid conversion from ‘ngx_int_t (*)(ngx_conf_t*) {aka long int (*)(ngx_conf_s*)}’ to ‘ngx_int_t (*)(ngx_cycle_t*) {aka long int (*)(ngx_cycle_s*)}’ [-fpermissive] ``` |
5
SErHo 2014-09-06 21:53:28 +08:00
把 static ngx_int_t ngx_http_cppjieba_init(ngx_conf_t *cf) 定义为 static ngx_int_t ngx_http_cppjieba_init(ngx_cycle_t *cycle)
|
11
YouXia 2014-09-07 13:45:31 +08:00 via Android
|
12
aszxqw OP @YouXia
应该不是这个意思吧。写时拷贝是没错,但是我 top 看实际内存使用确实是占用了两倍,记载的词典是 const,确实是只读,但是可能在socket模块有写操作,就把整个内存拷贝了? 具体我也没太明白。 如果能共享同一块内存当然是最好,现在这样多个 worker 应该也是多倍内存使用了,忧伤。 |
13
msg7086 2014-09-07 14:47:41 +08:00
@aszxqw 这么说吧。如果你有个占用内存20M的变量在堆栈上,然后你fork了自己100次。最终这个变量的占用内存还是20M,不会因为你fork了就变成2G的。所有的子进程完全共享同一块内存区域,一直到里面的数据被改变了为止。
top上显示的不是实际使用内存,而是统计使用内存才对吧。COW内存分页top应该是看不到的。 |