2011-10-26 8 views
5

Thread#joinに電話をかけても問題ありませんか?この場合、スレッドが爆発するかどうかは気にしません。Unicornに処理を継続させたいだけです。スレッド#joinを呼び出さないようにしてもよろしいですか?

class MyMiddleware 
    def initialize(app) 
    @app = app 
    end 

    def call(env) 
    t = Thread.new { sleep 1 } 
    t.join # is it ok if I skip this? 
    @app.call env 
    end 
end 

「ゾンビ糸」などがありますか?

答えて

7

joinを呼び出しても問題ありません。実際には、joinは、マルチスレッドコードではまったく必要ないことがよくあります。新しいスレッドが完了するまでブロックする必要がある場合は、joinに電話する必要があります。

「ゾンビ」スレッドはありません。新しいスレッドは完了するまで実行され、次に自分自身をクリーンアップします。

+0

私は同意します、参加は信じられないほど過大評価されています。あなたがスレッドについて教えているときには早い段階で役立ちますが、スレッドが実際にどのように機能するかを理解すれば、実際にはジョインは実際にマルチスレッドの能力を効果的に制限します。私が気づくパターンは、通常、結合はワーカースレッドのような非常に短命のスレッドでのみ使用されるということです。例:マネージャスレッドは10個のワーカースレッドを生成し、それらをすべて結合し、結果を集めて処理します。 – corsiKa

+0

@glowcoderまさにこのような状況では、使用しているプラ​​ットフォームやライブラリによっては、参加するよりも良い選択肢があります。 –

関連する問題