Fecshop 2016-07-19 17:22:02 12689次浏览 5条评论 11 4 0

对于php,有很多种多进程的实现,这里就不说了,下面介绍一种多线程的方式。
php真正的多线程实现方式,通过安装php的扩展:pthread 扩展

原文链接:php 真正的多线程 pthread

安装步骤如下:

1.下载地址是这个:

https://github.com/krakjoe/pthreads

但是这个下载的是 版本3 也就是php 7 才能用的

我们需要使用2版本

然后刷新的页面如下,拖到最底部:


在下一页找到版本2的

下载下来,这个v2 才是php5才可以使用的

下载下来,安装:

或者,您直接这样下载:


    cd /tools  
    wget https://github.com/krakjoe/pthreads/archive/v2.0.10.zip  
    unzip   v2.0.10.zip  
    cd pthreads-2.0.10  
    /usr/local/php/bin/phpize  
    ./configure --with-php-config=/usr/local/php/bin/php-config    
    make  
    make install  

注意:您的php 在编译的时候需要开启 --enable-maintainer-zts,


./configure --prefix=/usr/local/php --disable-fileinfo   --enable-fpm --with-config-file-path=/etc --with-config-file-scan-dir=/etc/php.d --with-openssl --with-zlib --with-curl --enable-ftp --with-gd --with-xmlrpc  --with-jpeg-dir --with-png-dir --with-freetype-dir --enable-gd-native-ttf --enable-mbstring --with-mcrypt=/usr/local/libmcrypt --enable-zip --with-mysql=/usr/local/mysql --without-pear --enable-maintainer-zts 



vim /etc/php.ini 
添加
extension=pthreads.so  

重启php  
/etc/init.d/php-fpm restart  

我之前搞的一个用php多线程获取订单货运号的例子:

http://blog.csdn.net/terry_water/article/details/50273847

觉得很赞
  • 评论于 2016-07-21 14:05 举报

    很不错的插件,支持支持。

    3 条回复
    评论于 2016-07-21 15:00 回复

    不是想法呀,胖子哥,这是真的扩展,我都在erp中用过这个玩意,一天几万个单,按照串行获取,大致2秒获取一个,一天下来处理不完的。

    评论于 2016-07-21 15:01 回复

    用多线程,一下子可以几百个并发,在一些需要并发, 轻量级计算的,用多线程还是不错的

    评论于 2016-08-02 10:51 回复

    另外,这个不是yii2插件,而是php的扩展

    觉得很赞
  • 评论于 2016-08-02 09:58 举报

    您好,我想请教个问题,我们项目用的yii1.1,用Yii::import加载类文件,但thread里面并不识别yii封装的方法,这个问题要怎么解决

    5 条回复
    评论于 2016-08-02 10:51 回复

    好像,在pthread不能用静态方法,必须是对象方法,每一个线程独立运行,对象都是独立分配空间,好像是,我不确定,你可以多试试,多查查资料。
    对于这个pthread,我就用过一次,公司一天上万个单,获取货运号太慢,我改成了多线程的方式,半个小时就搞完了。

    评论于 2016-08-02 10:54 回复

    不能用静态方法这个我也听别人说过,可能是这个原因,谢谢你的答复

    评论于 2016-08-02 10:57 回复

    我猜的原因应该是:每一个线程,在内存中分配独立的空间,
    静态方法也可以使用,但是你必须传递对象,通过对象调用静态方法,
    而不能直接classA::$app这样使用,你需要先实例化classA,new一个object,然后 $ob::$app,这样应该是可以的。
    也就是你在多线程里面用到的东西,你都需要对象实例化传递。
    我不知道我的说的对不对,仅供参考。

    评论于 2016-08-02 11:27 回复

    刚刚试了下,貌似不是静态方法的原因,test是个静态方法,如果我用require的方式加载类,是可以运行的,但是用Yii::import就没法运行了,是不识别Yii吧

    Yii::import('SimpleModel');
    require_once __DIR__.'/SimpleModel.php';
    SimpleModel::test();
    
    评论于 2016-08-02 14:29 回复

    应该是不能autoload的吧,需要提前require进去。多试试,我没有那么多业务场景,也就没有在玩这个

  • 评论于 2016-11-29 16:52 举报

    我使用php7安装了扩展,但在php.ini添加extension=pthreads.so是启动会报错的,

    1 条回复
    评论于 2016-12-01 08:58 回复

    php7 用版本3
    php5 用版本2

  • 评论于 2016-11-29 16:52 举报

    你的就不会吗,

  • 评论于 2016-12-22 09:18 举报

    最后,推荐一下我的Fecshop ,开源商城,github地址:https://github.com/fancyecommerce/yii2_fecshop

    演示地址:http://fecshop.appfront.fancyecommerce.com/

    截止到2016-11-12号,产品,分类,首页,评论,用户中心,搜索,多语言,多货币 等功能已经做完,除了购物车和支付部分,其他的基本都已经完成,关注fecshop的 在等2-3个月,也就是明年2,3月份,版本已经就可以出来,2017年4,5月份在把手机web 做一下,预计到明年5月份,后台,pc前台,手机web前台 ,命令控制台 这几个入口 基本可以完善,多谢大家关注和你们的Star,谢谢,我会坚持把他写好。

    作者QQ:2358269014

您需要登录后才可以评论。登录 | 立即注册