lnmp php 安装多线程 pthreads 扩展
阅读 (799) 2019-10-16 16:50:02
lnmp 将php升级成ZTS,开启Thread Safety,安装 pthreads 扩展
一、环境
ubuntu 14 + lnmp一键安装
二、问题
使用Lnmp安装自然是方便,一键部署,但正因为全自动部署,很多配置选项都是Lnmp自动设置好了,比如php的线程安全,默认就被disabled了
Thread Safety | disabled |
一开始查阅了很多资料,php要支持多线程,可以选择安装pthreads拓展,但这个拓展必需要php 的 Thread Safety 是 enabled,这就必需要重新编译php了,百度了一大堆有的没有,都没能解决,即然后我用了lnmp一键安装包,那就从官方找找解决方案,我用的是lnmp 1.4, 果然官方说要升级PHP时,如果要加自定义参数,可在 lnmp.conf 中自行加入参数
PHP_Modules_Options='' // 在引号中加入自定义参数
通过查询资料得知,需开启PHP ZTS 需在编译时加入 --enable-maintainer-zts 参数
那就简单啦,修改成:
PHP_Modules_Options='--enable-maintainer-zts'
保存好配置文件,再升级PHP版本,即执行lnmp目录中的 upgrade.sh
下面只剩等待了~~~~
更新完成后,使用
[root@localhost ~]# php -v
PHP 7.1.32 (cli) (built: Sep 16 2019 11:40:03) ( ZTS )
Copyright (c) 1997-2018 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2018 Zend Technologies
看到上面的 (ZTS)即表示已经是线程安全了
三、pthreads的安装
[root@localhost ~]# wget https://codeload.github.com/krakjoe/pthreads/zip/master
[root@localhost ~]# unzip master
[root@localhost ~]# cd pthreads-master/
[root@localhost pthreads-master]# phpize
[root@localhost pthreads-master]#./configure --with-php-config=/usr/local/php/bin/php-config
[root@localhost pthreads-master]# make && make install
[root@localhost pthreads-master]# cd /usr/local/php/etc/
[root@localhost etc]# cd /usr/local/php/etc/
[root@localhost etc]# cp php.ini php_bak.ini // 备份一下
[root@localhost pthreads-master]# echo extension = /usr/local/php/lib/php/extensions/no-debug-zts-20170718/pthreads.so >> /usr/local/php/etc/php.ini
再确认下拓展
[root@localhost ~]# php -m| grep pthreads
pthreads
测试代码
将下面代码存为PHP文件test.php
<?php
//实现多线程必须继承Thread类
class test extends Thread {
public function __construct($arg){
$this->arg = $arg;
}
//当调用start方法时,该对象的run方法中的代码将在独立线程中异步执行。
public function run(){
if($this->arg){
printf("Hello %s\n", $this->arg);
}
}
}
$thread = new test("World");
if($thread->start()) {
//join方法的作用是让当前主线程等待该线程执行完毕
//确认被join的线程执行结束,和线程执行顺序没关系。
//也就是当主线程需要子线程的处理结果,主线程需要等待子线程执行完毕
//拿到子线程的结果,然后处理后续代码。
$thread->join();
}
?>
运行测试下即可
更新于:2019-10-16 16:55:11