2

スレッドを使い始めたばかりです。私は理論を知っており、その主要な側面を理解していますが、このトピックについては少ししか練習していません。

次の問題の適切な解決策 (または可能であればパターン) を探しています。

このトランザクション コンポーネントの一部でもある、キューからタスクを処理するスレッドのプールを保持するトランザクション コンポーネントがあるとします。

このプールの各スレッドは、実行するタスクがあるまで待機し、キューから取り出して処理し、次のターンを待ちます。

また、複数のスレッドがこのキューにタスクを追加しているとします。次に、タスクが処理されるまでこれらのスレッドを一時停止します。

タスクが処理された場合、処理されたタスクをキューに入れていたスレッドを再び実行可能にする必要があります。

ruby クラスThreadはメソッドThread#stopと を提供しますThread#run。ただし、安定した実装が必要な場合は、これらのメソッドを使用しないでください。そして、ある種のシグナリングメカニズムを使用します。

ruby には、 、、、 などのようThreadに、一般的に同期とスレッド連携を扱うクラスがいくつかあります。MutexMonitorConditionVariable

ConditionVariable信号を発することができるので、私の友達かもしれませんが、よくわかりません。

これをどのように実装しますか?

4

1 に答える 1

1

Ruby は、Queueこれらの一部を処理するスレッドセーフ クラスを提供します。

queue.pop

値がキューにプッシュされるまでブロックします。この方法で、キューで待機するスレッドをいくつでも持つことができます。キューにプッシュするものの 1 つが別のキューまたは条件変数である場合、それを使用してタスクの完了を知らせることができます。

スレッドは、効果的に推論するのが難しいことで有名です。セルロイドなどの代替のより高いレベルのアプローチを使用する方が簡単であることがわかる場合があります。

于 2013-05-24T17:19:12.447 に答える