トップ «前の日記(2004-02-29) 最新 次の日記(2004-03-03)» 月表示 編集

日々の流転


2004-03-01 [長年日記]

λ. objectpool-0.1.0

とあるコードで、オブジェクトを再利用してGCを減らすために、むとうさんのObjectPoolを使ってみて、

  • ObjectPool#releaseが(オブジェクトの比較を「==」で行う)Array#indexを使っているので、等しいオブジェクトがあるとまずいことになりそう
  • ObjectPool#get_object_from_objectpoolの途中でTimeoutErrorに割り込まれるとまずいことになりそう
  • ObjectPool#releaseが一時的な配列オブジェクトを作るので、GCがあまり減らなそう
  • ObjectPool#releaseとObjectPool#get_object_from_objectpoolで、配列を線形探索してる

という点が気になったので書き換えてみた(objectpool.rb)。TimeoutErrorに割り込ませないために、Thread.exclusive{ ... } を使ってみたんだが、関係ないスレッドも止めちゃうのはちょっとやりすぎだな。(つーか、ちゃんとConditionVariableでも使え > オレ)

[追記] というわけで、ConditionVariableを使うようにしてみた(objectpool-2.rb)。timeoutするConditionVariable#waitが無いので、timeout{ ... } 内でConditionVariable#waitしてみたのだけど、これって正しい使い方?
Tags: ruby
本日のツッコミ(全2件) [ツッコミを入れる]
ψ むとぽん (2004-03-02 22:57)

なるほど、勉強になります。

ψ むとぽん (2004-03-02 23:07)

そのままメンテナンスも引き継ぎません?