千家信息网

PHP多线程之内部多线程的示例分析

发表于:2026-11-01 作者:千家信息网编辑
千家信息网最后更新 2026年11月01日,这篇文章主要介绍了PHP多线程之内部多线程的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。具体如下:
千家信息网最后更新 2026年11月01日PHP多线程之内部多线程的示例分析

这篇文章主要介绍了PHP多线程之内部多线程的示例分析,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。

具体如下:

setOptions($options);    }    //设置url 列表    function setUrls($urls)    {        $this->urls = $urls;        return $this;    }    //设置选项    function setOptions($options)    {        $options[CURLOPT_RETURNTRANSFER] = 1;        if (isset($options['HTTP_POST']))        {            curl_setopt($ch, CURLOPT_POST, 1);            curl_setopt($ch, CURLOPT_POSTFIELDS, $options['HTTP_POST']);            unset($options['HTTP_POST']);        }        if (!isset($options[CURLOPT_USERAGENT]))        {            $options[CURLOPT_USERAGENT] = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; SV1;)';        }        if (!isset($options[CURLOPT_FOLLOWLOCATION]))        {            $options[CURLOPT_FOLLOWLOCATION] = 1;        }        if (!isset($options[CURLOPT_HEADER]))        {            $options[CURLOPT_HEADER] = 0;        }        $this->options = $options;    }    //并行抓取所有的内容    function exec()    {        if(empty($this->urls) || !is_array($this->urls))        {            return false;        }        $curl = $data = array();        $mh = curl_multi_init();        foreach($this->urls as $k => $v)        {            $curl[$k] = $this->addHandle($mh, $v);        }        $this->execMulitHandle($mh);        foreach($this->urls as $k => $v)        {            $data[$k] = curl_multi_getcontent($curl[$k]);            curl_multi_remove_handle($mh, $curl[$k]);        }        curl_multi_close($mh);        return $data;    }    //只抓取一个网页的内容。    function execOne($url)    {        if (empty($url)) {            return false;        }        $ch = curl_init($url);        $this->setOneOption($ch);        $content = curl_exec($ch);        curl_close($ch);        return $content;    }    //内部函数,设置某个handle 的选项    private function setOneOption($ch)    {        curl_setopt_array($ch, $this->options);    }    //添加一个新的并行抓取 handle    private function addHandle($mh, $url)    {        $ch = curl_init($url);        $this->setOneOption($ch);        curl_multi_add_handle($mh, $ch);        return $ch;    }    //并行执行(这样的写法是一个常见的错误,我这里还是采用这样的写法,这个写法    //下载一个小文件都可能导致cup占用100%, 并且,这个循环会运行10万次以上    //这是一个典型的不懂原理产生的错误。这个错误在PHP官方的文档上都相当的常见。)    private function execMulitHandle($mh)    {        $running = null;        do {            curl_multi_exec($mh, $running);        } while ($running > 0);    }}/*下面是上面的类的一个测试的例子:*/$urls = array("http://baidu.com", "http://baidu.com", "http://baidu.com", "http://baidu.com", "http://baidu.com", "http://baidu.com", "http://www.google.com", "http://www.sina.com.cn", );$m = new Http_MultiRequest();$t = microtime(true);$m->setUrls($urls);//parallel fetch(并行抓取):$data = $m->exec();$parallel_time = microtime(true) - $t;echo $parallel_time . "\n";$t = microtime(true);//serial fetch(串行抓取):foreach ($urls as $url){    $data[] = $m->execOne($url);}$serial_time = microtime(true) - $t;echo $serial_time . "\n";

感谢你能够认真阅读完这篇文章,希望小编分享的"PHP多线程之内部多线程的示例分析"这篇文章对大家有帮助,同时也希望大家多多支持,关注行业资讯频道,更多相关知识等着你来学习!

线程 篇文章 写法 错误 示例 分析 内容 常见 价值 例子 兴趣 典型 函数 原理 同时 官方 文件 文档 更多 朋友 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 科技互联网 万易互联网科技 鑫亿盛互联网科技 上海亿帐通互联网科技 天速互联网络科技有限公司 哈尔滨新华互联网科技学院 重庆威客帮互联网科技 栖莱科技互联网股份有限公司 宝灵互联网科技有限公司 苏州铭阳互联网科技有限公司 北京市互联网新科技 皮皮虾互联网科技有限公司 2021世界互联网领先科技成果发布 普陀区互联网教育科技管理办法 互联网金融运营模式中的金融科技 云南互联网科技学费 长沙渺峰互联网科技有限公司 互联网科技创新创业项目 杭州科技互联网公司有哪些 互联网科技企业文化 广州为想互联网科技有限公司 中关村互联网科技集团 上海喔噻互联网科技 融贸通互联网科技 一五八零互联网科技 搜狐科技互联网 四川慕妮娅互联网科技有限公司 互联网第三次科技革命特征 济南小医互联网科技有限公司招聘 武汉亿视互联网科技有限公司
0