PHP多线程pthreads使用例子
发布:smiling 来源: PHP粉丝网 添加日期:2015-12-24 13:37:40 浏览: 评论:0
php本身对于多线程处理是不够理想的,但如果我们使用pthreads性能会有所提高了,下面来看一个PHP多线程pthreads使用例子.
- <?php
- declare(ticks = 1);
- $running = 1;
- //信号处理函数
- function sig_handler($signo)
- {
- switch ($signo) {
- case SIGINT:
- finish();
- break;
- default:
- break;
- }
- }
- pcntl_signal(SIGINT, "sig_handler");
- class test extends \Thread {
- public $url;
- public $result;
- public function __construct($url) {
- $this->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 < 500; $i++) {
- $urls[] = 'http://www.baidu.com/s?wd='. rand(10000, 20000);
- }
- $pool = array();
- for ($i=1;$i<=5;$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);
- }//phpfensi.com
- function finish() {
- global $running;
- global $pool;
- $running = 0;
- echo "接收到信号,等待运行中线程结束\n";
- foreach ($pool as $key=>$worker) {
- if ($pool[$key]->join()) {
- var_dump($pool[$key]->result);
- }
- }
- }
- ?>
Tags: PHP多线程 pthreads例子
推荐文章
热门文章
最新评论文章
- 写给考虑创业的年轻程序员(10)
- PHP新手上路(一)(7)
- 惹恼程序员的十件事(5)
- PHP邮件发送例子,已测试成功(5)
- 致初学者:PHP比ASP优秀的七个理由(4)
- PHP会被淘汰吗?(4)
- PHP新手上路(四)(4)
- 如何去学习PHP?(2)
- 简单入门级php分页代码(2)
- php中邮箱email 电话等格式的验证(2)