Namazu-devel-ja(旧)


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

sgmt: module loading



sgmt の sgmt_new, sgmt_destroy の内部的な挙動を変えました。

従来のモジュールの扱い:

  sgmt_new:     モジュールをロードする
  sgmt_destroy: モジュールを解放する

新方式:

  sgmt_new:     初回のみモジュールをロード
  sgmt_destroy: モジュールの解放はしない


頻繁に sgmt_new, sgmt_destroy を呼び出す使い方を考えると、そ
の度にモジュールのロード・解放を繰り返すのは非効率です。そこ
で、一度、ロードしたモジュールは解放せずに再利用し続けること
にしました。もちろん2重にロードすることはありません。

# 従来の方式では、ファイル単位で sgmt_new, sgmt_destroy を呼
# び出す使い方では、10,000 ファイルを処理するのに 10,000回の
# g_module_open, g_module_close が行われます。さすがに、それ
# は非効率かなと。

「モジュールの解放はしない」という方針には、もしかしたら問題
があるかもしれません。問題があれば指摘してください。

p.s.
dlopen && dlclose がプロセスのサイズにどのような影響を及ぼす
か気になったので、調べました。OSによって異なると思いますが、
Linux では dlopen でプロセスのサイズが増え、dlcloseではプロ
セスのサイズが減るようです (減らないと予想していた)。

実験用プログラム:
<http://cl.aist-nara.ac.jp/~satoru-t/tmp/gmodule-process.c>
/proc/PID/status を開くのでたぶん Linuxでしか動きません。

--
高林 哲 (Takabayashi, Satoru)
http://cl.aist-nara.ac.jp/~satoru-t/