2017-03-24 14 views
1

私は、入力されたデータの接続をリッスンし、入力の一時停止中に出力データを書き込むソケットサーバーを持っています。これはループしているので、私のプロセスがすぐに入力を期待していない間に他のプロセスがある程度のCPU時間を持つことを可能にするためにsleepコールを行っています。sleepとusleepはPHP内部で動作が異なるのですか?

私はこれを知っていますsleepしかし、usleepもOSに実行を戻しますか?伝統的に、sleepのシステムコールは秒しか受け入れられないことを知っているので、私は疑いがあります.10年前にCプログラミングについて読んだ本は、無限ループを本質的にシミュレートするようなハックを含むsleepは呼び出しますが、CPU時間を他のプロセスに渡すことはありません。 (この本は間違っていたこと、または、もはや正確でないかもしれない、私はちょうどそれが言った何を言っている。)私はLinuxを使用しています

、PHPのバージョン5.6および7.1

+0

OSレベルの疑いがあります。 http://man7.org/linux/man-pages/man3/usleep.3.html – ceejayoz

+0

あなたはそれをテストすることができます。 'usleep(10000)'を使ってCPUの負荷を監視してください。 – Halcyon

+0

'select'や' poll'を使って入力が到着するのを待つことができます。あなたのプログラムはより速く応答し、より少ないCPUを使用します。 – mvds

答えて

0

ありがとうこれは、プラットフォームに依存するが、Linux上で、あなたがテストするには、この簡単なスクリプトを使用することができます、php test.php & top -d 0.1初めてと

$start = microtime(true); 

while(true){ 
     while(microtime(true) - $start < .9){} 
} 

//while(true){ 
//  usleep(900000); 
//} 

ランそれは偽sleepがどのように見えるかを観察するtopの検査後に行わ生み出されたPHPのプロセスを殺します、com最初のwhileループを実行し、2番目のループのコメントを外してスクリプトを再実行し、CPU使用量を書き留めます。

ハルシオンに感謝してくれてありがとうございました。

関連する問題