PHP 真正多线程的使用

| |
[不指定 2013-12-17 11:17 | by 张宴 ]
  PHP 5.3 以上版本,使用pthreads PHP扩展,可以使PHP真正地支持多线程。多线程在处理重复性的循环任务,能够大大缩短程序执行时间。

  我之前的文章中说过,大多数网站的性能瓶颈不在PHP服务器上,因为它可以简单地通过横向增加服务器或CPU核数来轻松应对(对于各种云主机,增加VPS或CPU核数就更方便了,直接以备份镜像增加VPS,连操作系统、环境都不用安装配置),而是在于MySQL数据库。如果用 MySQL 数据库,一条联合查询的SQL,也许就可以处理完业务逻辑,但是,遇到大量并发请求,就歇菜了。如果用 NoSQL 数据库,也许需要十次查询,才能处理完同样地业务逻辑,但每次查询都比 MySQL 要快,十次循环NoSQL查询也许比一次MySQL联合查询更快,应对几万次/秒的查询完全没问题。如果加上PHP多线程,通过十个线程同时查询NoSQL,返回结果汇总输出,速度就要更快了。我们实际的APP产品中,调用一个通过用户喜好实时推荐商品的PHP接口,PHP需要对BigSea NoSQL数据库发起500~1000次查询,来实时算出用户的个性喜好商品数据,PHP多线程的作用非常明显。

  PHP扩展下载:https://github.com/krakjoe/pthreads
  PHP手册文档:http://php.net/manual/zh/book.pthreads.php

  1、扩展的编译安装(Linux),编辑参数 --enable-maintainer-zts 是必选项:
cd /Data/tgz/php-5.5.1
./configure --prefix=/Data/apps/php --with-config-file-path=/Data/apps/php/etc --with-mysql=/Data/apps/mysql --with-mysqli=/Data/apps/mysql/bin/mysql_config --with-iconv-dir --with-freetype-dir=/Data/apps/libs --with-jpeg-dir=/Data/apps/libs --with-png-dir=/Data/apps/libs --with-zlib --with-libxml-dir=/usr --enable-xml --disable-rpath --enable-bcmath --enable-shmop --enable-sysvsem --enable-inline-optimization --with-curl --enable-mbregex --enable-fpm --enable-mbstring --with-mcrypt=/Data/apps/libs --with-gd --enable-gd-native-ttf --with-openssl --with-mhash --enable-pcntl --enable-sockets --with-xmlrpc --enable-zip --enable-soap --enable-opcache --with-pdo-mysql --enable-maintainer-zts
make clean
make
make install        

unzip pthreads-master.zip
cd pthreads-master
/Data/apps/php/bin/phpize
./configure --with-php-config=/Data/apps/php/bin/php-config
make
make install


vi /Data/apps/php/etc/php.ini

添加:
extension = "pthreads.so"


  2、给出一段PHP多线程、与For循环,抓取百度搜索页面的PHP代码示例:


技术大类 » PHP/JS/Shell | 评论(104) | 引用(0) | 阅读(261418)
freax
2014-1-7 23:03
收下有时间就去研究
小熊 Homepage
2014-1-17 21:39
你好,张老师,有个数据库问题请教一下最近使用数据库时有个100万数据表运行一段时间后查询速度变慢,测试检查后发现100万数据库搜索主键(比如where id=100000)要花几十毫秒,而正常情况下应该是小于1毫秒才对,用check table命令检查表之后就恢复正常了,但是运行几小时后速度又变回原样有个网友说这是因为数据库频繁更新、查询之后表损坏导致索引失效,所以数据库需要经常检查、恢复数据库,这种说法正确吗?如果是这样的话,那不是大部分的mysql数据库都需要每天甚至每隔几小时检查一下?这个问题和我本身的机器无关,在多种平台多个环境多台服务器上测试都有这个问题。谢谢了!uplook
felix Email
2014-1-22 17:16
我们同事实验下,发现有下情况
class MainServer{
    class Thread1{
        public $conn = array();
        public function run(){
           while(true){
                     ...
             $this->conn[] = $conn;(socket资源)
         }        
       }        
   }
   thread = new Thread1().start();
  print_r($thread->conn);
}

发现外面主线程 不能取得 里面线程的 conn socket资源,不知道张老师是否发现有此问题
无敌WEB Homepage
2014-2-10 17:25
以前净吸收知识,没评论,第一次评,写得好,收录了
dddd
2014-2-13 14:25
这是一条隐藏评论或留言。您需要以合适的身份登入后才能看到。
dzzzzz
2014-2-13 14:27
badcoolquestionsleepypigenvyshysmilesmilesmilesmilesmilesmilesmilequestionquestionquestionquestionquestionquestionkillkillsmileuplookzanzanzanbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadbadcrycrykillangerenvyenvypigsleepypukequestionquestionkillgringrinenvycrydoglovestupidshuaishuaishuaishuaishuaishuaishuaishuaismokesmokeshockshockshockshockshockshockshockshockbadcoolquestionsleepypigenvyshysmilesmilesmilesmilesmilesmile[emotbadbadilesmilesmilesmimot]shockshockshockshockshock
macvv Homepage
2014-2-13 17:45
这个好啊..测试下性能先.
www.gegejiejie.com Homepage
2014-2-19 15:12
www.gegejiejie.com
www.gegejiejie.com Homepage
2014-2-20 19:10
www.gegejiejie.com
phper14 Homepage
2014-2-25 14:25
小明
2014-3-26 23:23
谢谢,学习了
hava
2014-4-3 14:58
pukequestionunhappypukeshysleepyunhappyuplookstupidshypukesmilesmokeshock
bdh
2014-4-12 20:38
真不错 zan
陈家铭
2014-4-18 10:20
PHP-CLI下也可以么?
www.meiya51.com Email
2014-4-22 14:42
学习下。谢谢了,写的很棒!牙齿矫正梦想之城
搞笑图 Email Homepage
2014-5-5 20:57
aaa
2014-5-13 16:53
线程间如何能信呢
雀恰网 Homepage
2014-5-13 20:53
真是技术流啊,我是一名文学的爱好者,习惯在网站上面发表一些碎碎念,小清新http://www.queqia.com/xiaoqingxin小清新文学我也喜欢,有喜好情感文学的朋友一起去雀恰网交流啊。
jonhx Homepage
2014-5-17 11:10
非常实用。有文档出来了吗
houmien
2014-5-20 11:04
使用例子中的方法,执行500多次的时候,就是报出  pthreads has detected that the my_thread_run could not be started, the system lacks the necessary resources or the system-imposed limit would be exceeded ,是不是线程上限了?每次foreach都是新开的线程,前面的线程还在执行中?
分页: 3/6 第一页 上页 1 2 3 4 5 6 下页 最后页
发表评论
表情
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
emotemotemotemotemot
打开HTML
打开UBB
打开表情
隐藏
记住我
昵称   密码   游客无需密码
网址   电邮   [注册]