0

Ruby でプログラムの 2 つ (または 3 つ) の「ファセット」を継続的に実行する必要があります。通信スレッド、レンダリング スレッド、そしておそらくキャッシュ スレッドです。

アイデアは、レンダリング スレッドがスライド ショーを表示し (その定義がファイルから読み取られる)、すべてのスライドが通信スレッドによってリモート HTTP サーバーから取得されるというものです。レンダリングは継続的で停止する必要はありません (したがって、キャッシュが必要になる可能性があります)。ファイルはプログラムの存続期間中に変更される可能性があるため、(その場で) 再解析する必要があります。

通信スレッドがショーの「チャプター」全体を取得したときのように、「ファセット」間でメッセージを送信したいと思います。たとえば、ショー全体がダウンロードされるのを待つ前にレンダリング スレッドを開始できます。

Ruby スレッドまたは DRb を使用する必要がありますか? スレッド間でメッセージを渡すにはどうすればよいですか?

フィードバックをお寄せいただきありがとうございます。

4

1 に答える 1

2

最初はシンプルにしてください - 常に最良のアドバイスです。2 つのスレッドから始めて、必要なパフォーマンスが得られるかどうかを確認してください。条件変数または単純なミューテックスを使用して、取得したチャプターのリストを同期できます。アンダーランの問題が発生する可能性があります-レンダリングに使用できる章はありませんが、少なくともコアRubyだけを使用して実行可能なソリューションの骨を持っています.

次に、他の可能性を提供するソリューションをぜひ検討してください。DRb とは別に、EventMachine (章を読むときに必要になる可能性のある非同期機能について) と、メッセージング システムが提供するより一般的で疎結合についての RabbitMQ も検討する必要があります。

小さく始めて、あまり速く動かそうとしないでください。Ruby スレッドについて懸念がある人のために、RabbitMQ キューをリッスンする小さなレポート レンダリング クライアントを実行しています。クライアントは、(Google) グラフのレンダリング、アラートの送信、さまざまなキューの自動リセット (数時間のデータが収集された後) に 4 つのスレッドを使用します。すべてうまくいきます!

クリス

于 2009-08-28T11:54:15.453 に答える