使用pthreads实现真正的PHP多线程(需PHP5.3以上版本)

本文介绍了一种使用PHP实现多线程并发处理HTTP请求的方法。通过自定义线程类`test_thread_run`并利用`model_http_curl_get`函数发起HTTP GET请求,实现了对大量URL进行高效并发获取。同时,对比了多线程方式与传统循环方式的性能差异。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

<?php
class test_thread_run extends Thread 
{
	public $url;
	public $data;

	public function __construct($url)
	{
		$this->url = $url;
	}

	public function run()
	{
		if(($url = $this->url))
		{
			$this->data = model_http_curl_get($url);
		}
	}
}

function model_thread_result_get($urls_array) 
{
	//启动多线程
	foreach ($urls_array as $key => $value) 
	{
		$thread_array[$key] = new test_thread_run($value["url"]);
		$thread_array[$key]->start();
	}

	foreach ($thread_array as $thread_array_key => $thread_array_value) 
	{
		//等待线程执行完成
		while($thread_array[$thread_array_key]->isRunning())
		{
			usleep(10);
		}

		//收集结果
		if($thread_array[$thread_array_key]->join())
		{
			$variable_data[$thread_array_key] = $thread_array[$thread_array_key]->data;
		}
	}

	return $variable_data;
}

function model_http_curl_get($url,$userAgent="") 
{
	$userAgent = $userAgent ? $userAgent : 'Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.2)'; 
	$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, $userAgent);
	$result = curl_exec($curl);
	curl_close($curl);
	return $result;
}

for ($i=0; $i < 100; $i++) 
{ 
	$urls_array[] = array("name" => "baidu", "url" => "http://www.baidu.com/s?wd=".mt_rand(10000,20000));
}

$t = microtime(true);
$result = model_thread_result_get($urls_array);
$e = microtime(true);
echo "多线程:".($e-$t);

$t = microtime(true);
foreach ($urls_array as $key => $value) 
{
	$result_new[$key] = model_http_curl_get($value["url"]);
}
$e = microtime(true);
echo "For循环:".($e-$t);
?>

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值