いくつかのインスタンス変数を共有する、Ruby で記述された高度にマルチスレッド化されたアプリがあります。これらの変数への書き込みはまれ (1%) ですが、読み取りは非常に一般的 (99%) です。これらのスレッドが常に最新の値を参照できるようにする最善の方法 (あなたの意見または慣用的な Ruby の方法) は何ですか? これまでに私が持っていたいくつかのアイデアを次に示します (ただし、これをオーバーホールする前に、あなたの意見をお聞かせください)。
- これらの変数の読み取りまたは書き込みの前に最もよく使用されるロックを用意します ( Java Concurrency in Practiceから)。これの欠点は
synchronize
、コードに多くのブロックが配置され、それを回避する簡単な方法が見当たらないことです。 - Ruby の
freeze
方法 (こちらを参照) を使用しますが、これも同様に面倒に見え、最初のオプションが提供する同期の利点はまったく得られません。
これらのオプションはどちらも非常に似ているように見えますが、うまくいけば、そこにいる誰かがより良いアイデアを持っているでしょう (または、これらのアイデアのいずれかについてうまく議論できるでしょう)。また、操作の途中でオブジェクトが破損したり変更されたりしないように、オブジェクトを不変にしても問題ありませんが、自分で呼び出しを行うのに十分なほどRubyを知りません。この質問は、オブジェクトが非常に可変です。