Namazu-win32-users-ja(旧)


[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

Re: 巨大インデックスへの挑戦



<00b701c05070$da4f1930$078a89d2@xxxxxxxxxxxxxxxx>の記事において
nakamura@xxxxxxxxxxxxxxxxxさんは書きました。

>> CPU    : Pentium III 933MHz
>> Memory : 256MB
>> OS     : Microsoft Windows 2000 Server SP1
>> Namazu : 2.0.5 (nmz205.exe)
>>          mknmz には、--chechpoint のオプションをつけています。
>>          mknmzrc は、$ON_MEMORY_MAX = 1000000 にしています。

  なんとなくイヤな予感がして、ActiveState の web を見にいってみたので
すが...
http://velocity.activestate.com/docs/ActivePerl/lib/Pod/perlfork.html 
によると、

exec()                                                            
     Calling exec() within a pseudo-process actually spawns the     
     requested executable in a separate process and waits for it to
     complete before exiting with the same exit status as that process.
     This means that the process ID reported within the running
     executable will be different from what the earlier Perl fork()
     might have returned. Similarly, any process manipulation functions
     applied to the ID returned by fork() will affect the waiting     
     pseudo-process that called exec(), not the real process it is
     waiting for after the exec().

  「exec() は別 process を起動して、その終了を待つ」という挙動をするよ
うに読めます。
  --checkpoint は exec() をしてプロセスが保持していたメモリを解放させ
る、という動作を期待しているのですが、この場合は期待した動きにならない
のかもしれません... むしろ余計にメモリを消費してしまうかも。
  --checkpoint をつけないとどうでしょうか?

>> C:\>perl -version
>> This is perl, v5.6.0 built for MSWin32-x86-multi-thread

>> C:\>mknmz -C
>> Perl: 5.006
>> 
>> バージョンが違うのはなぜ?

  これは正しい動作です。もともと perl 5.6.0 は 5.006 という version が
つけられる予定だったのですが、「実際の変化は著しいのに、version が 
0.001 しか変わらないのは誤解を招く」ということで、5.6.0 という表記に変
更されました。
  内部的には 5.006 という値が($[ に)保持されているのでそれがそのまま表
示されています。

# どこかに 5.6.0 のような表記の値も保持されているのかもしれないのです
# が、あまり 5.6.0 を使っていないので実際のところはわかりません (_o_)
-- 
野首 貴嗣
E-mail: knok@xxxxxxxxxxxxx