特定の処理で明らかにsleep(0)を実行するのは解っていたのですが、特に害はないと思ってそのままにしていました。
自分でも使っているものなので結構いろいろな条件で実行できているので安心していたのですが、スマホの端末で設定を行っていると切り替えを行うタイミングでかなり重たいプチフリーズが発生することが気になり始めました。
現象としてはsleep(0)の時に顕著に発生する頻度が高く、1以上ではそこまでといった感じでした。
体感で5秒から長い時には1分程度のフリーズでしょうか?
そもそもsleepを入れている目的は処理負荷を軽減させることが目的なのですが、sleep(0)の時には予想外の処理が行われているのかもしれません。
いままではjavaのsleepに対してはそこまでひどい副作用はないものだと過信していたのですが、そうでもないという結果でしょうかね?
対処としては if (wait > 0) sleep(wait); としただけですが。
気になったのでsleep(0)で直接検索してみると Sleep関数の落とし穴 - ペンギンの備忘録 とか、 Thread.sleep(0) のオーバーヘッドがヤバイ件 - にょきにょきブログ などで具体的な内容が上がってますね。
sleep(0)の動作で似ていると思えるのがWindows 3.1時代のDelphiのApplication.ProcessMessageを思い浮かべますね。
0 件のコメント:
コメントを投稿