下面的例子摘自:curl_multi_exec性能conern
http://php.net/manual/en/function.curl-multi-close.php#example-3540
這個例子將創建兩個捲曲把手,將它們添加到多手柄, 然後並行地運行它們。
<?php
// create both cURL resources
$ch1 = curl_init();
$ch2 = curl_init();
// set URL and other appropriate options
curl_setopt($ch1, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch1, CURLOPT_HEADER, 0);
curl_setopt($ch2, CURLOPT_URL, "http://www.php.net/");
curl_setopt($ch2, CURLOPT_HEADER, 0);
//create the multiple cURL handle
$mh = curl_multi_init();
//add the two handles
curl_multi_add_handle($mh,$ch1);
curl_multi_add_handle($mh,$ch2);
$running=null;
//execute the handles
do {
curl_multi_exec($mh,$running);
} while ($running > 0);
//close the handles
curl_multi_remove_handle($mh, $ch1);
curl_multi_remove_handle($mh, $ch2);
curl_multi_close($mh);
?>
我調整了一點,以實現我的需求。我只想調用一個資源,但在請求時執行本地代碼。這工作得很好,我的性能問題也適用於沒有修改的示例。
我產生了需要5秒以遞送資源,並用它們爲$ CH1和$ CH2
正如所預期的總執行只有5秒而不是10
了,但在做環我加一個小計數器顯示curl_multi_exec和do循環在〜5秒內在本地機器上執行〜5000000次。這大概是每微秒一次,這實際上相當多。
我很擔心,這佔用大量的CPU資源,而只是在等待請求完成,基本上無所作爲。
我記得的第一件事情我在一個Java課程中學之一是爲了避免無限循環,並與工作線程休眠/中斷,而不是針對上述原因。
但是我們沒有線程在這裏,我不知道這是否是有效的PHP了。
由於這是我認爲我而是請專家在這裏第一次正式的例子。
我想過DO循環實現短的睡眠。喜歡usleep(100)
。
我關心的是否有效?
如果是這樣,睡眠解決方案是一個很好的解決方案嗎?
- 如果是這樣,什麼是一個良好的睡眠間隔?我會喜歡儘可能小的東西,所以沒有任何過程變慢,但我也不想錘擊服務器。
如果不是,爲什麼?
我個人不能說,但你可以測試添加微睡眠。如果它增加了時間,那麼對'curl_multi_exec'的永久調用是必要的。無論如何,100微秒對我來說看起來不錯,可能更多的是讓測試結果更加明顯。 – hakre
如果您決定使用usleep(100),請注意如果您在Windows上運行Windows。見警告[這裏](http://www.php.net/manual/en/function.usleep.php#allnotes)。 – PPrice