php本身对于多线程处理是不够理想的,但如果我们使用pthreads性能会有所提高了,下面来看一个php多线程pthreads使用例子
url = $url;
}
public function run() {
if ($this->url) {
$this->result = model_http_curl_get($this->url);
}
}
}
function model_http_curl_get($url) {
$curl = curl_init();
curl_setopt($curl, curlopt_url, $url);
curl_setopt($curl, curlopt_returntransfer, 1);
curl_setopt($curl, curlopt_timeout, 5);
curl_setopt($curl, curlopt_useragent, 'mozilla/4.0 (compatible; msie 7.0; windows nt 5.2)');
$result = curl_exec($curl);
curl_close($curl);
return $result;
}
for ($i = 0; $i $urls[] = 'http://www.baidu.com/s?wd='. rand(10000, 20000);
}
$pool = array();
for ($i=1;$i $key = uniqid();
$url = array_shift($urls);
$pool[$key] = new test($url);
$pool[$key]->start();
echo 启动线程$key\n;
}
while ($urls && $running) {
foreach ($pool as $key=>$worker) {
if(! $worker->isrunning()){
//unset($pool[$key]);
echo 线程.$key.已结束\n;
$url = array_shift($urls);
$pool[$key] = new test($url);
$pool[$key]->start();
echo 启动线程$key\n;
}
}
usleep(1000);
}
function finish() {
global $running;
global $pool;
$running = 0;
echo 接收到信号,等待运行中线程结束\n;
foreach ($pool as $key=>$worker) {
if ($pool[$key]->join()) {
var_dump($pool[$key]->result);
}
}
}
