インターネットから非常に大きなファイルをダウンロードするスクリプトを作成しました。HTTP経由でファイルをダウンロード中にCPU使用率を減らす
非常に簡単な何か:
<?php
$source = fsockopen(…); // http
$destination = fopen(…,'wb'); // file
while (!feof($source))
{
fwrite($destination,fread($source,4096));
}
fclose($source);
fclose($destination);
?>
それは素晴らしい作品が、毎秒約10メガバイトをダウンロードするときに、このスクリプトは私のサーバー上で100%のCPUを使用しています。それは普通ですか?
インテルXeonクアッドコアX3323 @ 2.50 GHzです。
P.S.スクリプトはHTTPヘッダーを最初に読み込むため、実際は少し複雑ですが、問題はありません。
OPが明示的に非ブロック化していない限り、ソケットはデフォルトでブロックされませんか? – Alnitak
@Alnitakはい。しかし、OPは多くのコードを残しておらず、そこには 'socket_set_nonblock'があるかもしれません。ソケットがブロックされている場合、ループは100%CPUを発生させません。 – phihag