QA@IT
«回答へ戻る

回答を投稿

スレッド間通信が1:1で行われるのであれば正直、趣味の問題(ブロックしてくれるのを便利と思うかうざいと思うか)ではないかとおもいますが、m:nでの通信を行う場合はArrayではなかなか厳しいです。ワーカースレッドという話なので、ワーカーが複数いる場合を考えてください:

    producer  ---+--- worker #1
                 |
                 +--- worker #2
                 |
                 +--- worker #3
                 |
                ...

こういう状況でワーカーがジョブをうばいあうような場合、Arrayを使うのは困難です。たとえばworker #1キューにジョブがたまっていることを確認して、キューから取り出そうとしたときには、もうworker #2がそれを取り出してしまっているかもしれないわけです。

Queueを使うのであればそのようなことは起こりません。

スレッド間通信が1:1で行われるのであれば正直、趣味の問題(ブロックしてくれるのを便利と思うかうざいと思うか)ではないかとおもいますが、m:nでの通信を行う場合は`Array`ではなかなか厳しいです。ワーカースレッドという話なので、ワーカーが複数いる場合を考えてください:

        producer  ---+--- worker #1
                     |
                     +--- worker #2
                     |
                     +--- worker #3
                     |
                    ...


こういう状況でワーカーがジョブをうばいあうような場合、`Array`を使うのは困難です。たとえばworker #1キューにジョブがたまっていることを確認して、キューから取り出そうとしたときには、もうworker #2がそれを取り出してしまっているかもしれないわけです。

`Queue`を使うのであればそのようなことは起こりません。