2016-06-14 1 views
2

私は、ワーカースレッドを開始および管理するクラスを持っています。 ;Rubyスレッドで複数時間スリープ状態になるとパフォーマンスにどのような影響がありますか?

DELAY = 6 * 60 * 60 # Sleep 6 hours by default 

Thread.new do 
    do_some_work() 

    sleep(DELAY) 
end 

do_some_workが平均的に完了するまでに約5秒を取って、非常にリソース集中型ではありません:スレッドが次のようになりますしかし、ブロックするべきではありませんし、私はそれを頻繁に呼び出す場合、エラーを抑制する可能性があります。

Rubyスレッドで何時間も眠っていることの意味がわかりません。このコードを使用すると、重大なパフォーマンス上の違反が予想されますか?私はこの仕事のためにcronジョブを使うことができないことに気付くでしょう。

+2

これは通常、完全に任意の時間スリープするスレッドではなく、適切なタスクスケジューラが必要なサインです。 'cron'も良いオプションです。 – tadman

+0

'cron'は私の最初の考えでした。残念ながら、私はこの状況でそれを使用することはできません。しかし、私は答えを感謝します。 – jamesberlage

答えて

2

Rubyインタプリタは、実行中はシステム上のメモリを使用します。したがって、このスレッドが6時間ごとに起きてそのことを行うことができるように、Rubyインタプリタプロセス全体を実行している場合、それは悪い可能性があります。オペレーティングシステムのシステム監視ツールを使用して、プロセスに必要なメモリ量を確認することができます。

これ以外にも、何時間もスリープするスレッドがあれば問題ありません。

+0

ありがとう、私は答えを感謝します。 – jamesberlage

関連する問題