php 真正的多线程 pthread [ 2.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多线程获取订单货运号的例子:
Fecshop 深圳
注册时间:2016-01-21
最后登录:2024-08-13
在线时长:73小时36分
最后登录:2024-08-13
在线时长:73小时36分
- 粉丝157
- 金钱2381
- 威望490
- 积分8011
热门源码
- 基于 Yii 2 + Bootstrap 3 搭建一套后台管理系统 CMF
- 整合完 yii2-rbac+yii2-admin+adminlte 等库的基础开发后台源码
- 适合初学者学习的一款通用的管理后台
- yii-goaop - 将 goaop 集成到 Yii,在 Yii 中优雅的面向切面编程
- yii-log-target - 监控系统异常且多渠道发送异常信息通知
- 店滴云1.3.0
- 面向对象的一小步:添加 ActiveRecord 的 Scope 功能
- Yii2 开源商城 FecShop
- 基于 Yii2 开发的多店铺商城系统,免费开源 + 适合二开
- leadshop - 基于 Yii2 开发的一款免费开源且支持商业使用的商城管理系统
共 5 条评论
很不错的插件,支持支持。
不是想法呀,胖子哥,这是真的扩展,我都在erp中用过这个玩意,一天几万个单,按照串行获取,大致2秒获取一个,一天下来处理不完的。
用多线程,一下子可以几百个并发,在一些需要并发, 轻量级计算的,用多线程还是不错的
另外,这个不是yii2插件,而是php的扩展
您好,我想请教个问题,我们项目用的yii1.1,用Yii::import加载类文件,但thread里面并不识别yii封装的方法,这个问题要怎么解决
好像,在pthread不能用静态方法,必须是对象方法,每一个线程独立运行,对象都是独立分配空间,好像是,我不确定,你可以多试试,多查查资料。
对于这个pthread,我就用过一次,公司一天上万个单,获取货运号太慢,我改成了多线程的方式,半个小时就搞完了。
不能用静态方法这个我也听别人说过,可能是这个原因,谢谢你的答复
我猜的原因应该是:每一个线程,在内存中分配独立的空间,
静态方法也可以使用,但是你必须传递对象,通过对象调用静态方法,
而不能直接classA::$app这样使用,你需要先实例化classA,new一个object,然后 $ob::$app,这样应该是可以的。
也就是你在多线程里面用到的东西,你都需要对象实例化传递。
我不知道我的说的对不对,仅供参考。
刚刚试了下,貌似不是静态方法的原因,test是个静态方法,如果我用require的方式加载类,是可以运行的,但是用Yii::import就没法运行了,是不识别Yii吧
Yii::import('SimpleModel'); require_once __DIR__.'/SimpleModel.php'; SimpleModel::test();
应该是不能autoload的吧,需要提前require进去。多试试,我没有那么多业务场景,也就没有在玩这个
我使用php7安装了扩展,但在php.ini添加extension=pthreads.so是启动会报错的,
php7 用版本3
php5 用版本2
你的就不会吗,
最后,推荐一下我的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