我已經創建了一個腳本,可以從互聯網上下載非常大的文件。通過HTTP下載文件時減少CPU使用量
的東西很簡單:
<?php
$source = fsockopen(…); // http
$destination = fopen(…,'wb'); // file
while (!feof($source))
{
fwrite($destination,fread($source,4096));
}
fclose($source);
fclose($destination);
?>
它的偉大工程,但這個劇本我的服務器上使用100%的CPU下載大約每秒10 MB的時候。這是正常的嗎?
這是一款Intel Xeon四核酷睿X3323 @ 2.50 GHz。
P.S.實際上它有點複雜,因爲我的腳本首先讀取HTTP標頭,但沒關係。
默認情況下套接字不會被阻塞,除非OP明確地使其成爲非阻塞的? – Alnitak 2011-12-24 12:41:50
@Alnitak Yup。然而,OP遺漏了很多代碼,並且在那裏可能有一個'socket_set_nonblock'。如果套接字將被阻塞,則循環不會導致100%的CPU。 – phihag 2011-12-24 12:48:14