做PHP的是几乎不用考虑的,毕竟不是C/C++这种偏底层适合做C/S或单Client的应用,PHP大多都是LAMP或LNMP的架构,结合Windows Server用IIS多线程的从来还没有遇见过。
cd /test
wget https://pecl.php.net/get/parallel-1.2.1.tgz
tar zxf parallel-1.2.1.tgz
cd parallel-1.2.1/
/usr/local/php/bin/phpize
./configure
make
make install
vim /usr/local/php/etc/php.ini
extension=parallel
常规测试,输出@@@%%%,说明程序是从上到下依次执行的。
vim /test/a.php
<?php
for($i = 0; $i < 3; $i ++) {
echo '@';
}
for($j = 6; $j < 9; $j ++) {
echo '%';
}
使用扩展执行
<?php
$runtime = new \parallel\Runtime();
$future = $runtime->run(function(){
for ($i = 0; $i < 25; $i ++)
echo "@";
return "result";
});
for ($j = 0; $j < 25; $j ++) {
echo "%";
}
print_r($future->value());
多次执行,效果是这样的,可见是多个线程交替执行。
%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@result[root@localhost test]# php a.php
@%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@result[root@localhost test]# php a.php
%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@result[root@localhost test]# php a.php
%%%%%%%%%%%%%%%%%%%%@%@@@@@@@@@@@@@@@%%@@@@@@@@@%%result[root@localhost test]# php a.php
%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@result[root@localhost test]# php a.php
%%%%%%%%%%%%%%%%%%%%%%%%%@@@@@@@@@@@@@@@@@@@@@@@@@result[root@localhost test]# php a.php
%%%%%%%%%%%%%%%%%%%%%%%%@%@@@@@@@@@@@@@@@@@@@@@@@@result[root@localhost test]# php a.php
PHP的协程使用yield关键字来实现
,在导入过程中,就用到了,协程不一定会跟着函数的return而结束,下次调用时能保留上调用时的状态的特点
<?php
function func() {
$i = 0;
while ($i < 10) {
yield $i;
$i ++;
}
}
$func = func();
foreach($func as $v) {
echo $v;
}
ps aux | grep php
root 3511 0.0 0.3 172232 5936 ? Ss Mar17 1:20 php-fpm: master process (/usr/local/php/etc/php-fpm.conf)
www 4554 0.0 0.7 178812 14516 ? S 15:13 0:01 php-fpm: pool www
www 4555 0.0 0.7 178812 14444 ? S 15:13 0:01 php-fpm: pool www
www 4556 0.0 0.7 178812 14500 ? S 15:13 0:01 php-fpm: pool www
www 4596 0.0 0.7 178812 14496 ? S 15:14 0:01 php-fpm: pool www
www 4597 0.0 0.7 178812 14556 ? S 15:14 0:01 php-fpm: pool www
ZTS:指的是 PHP 的线程安全版本。PHP ZTS 版本中的核心功能被修改和重新编写,以确保在多线程环境下能够安全地运行。这样,开发人员就可以在需要在多线程环境中运行 PHP 脚本时,选择使用 PHP ZTS 版本来提高线程安全性和稳定性。
总的来说,PHP ZTS(Zend Thread Safety)是 PHP 的线程安全版本,专门设计用于在多线程环境下提供更好的线程安全性和稳定性。
TS:多线程访问时,采用了加锁机制,当一个线程访问某些数据时进行保护,其它线程不能进行访问,直到该线程读取完,其它线程才可使用。主要是针对windows系统iis运行的情况,如果是使用ISAPI的方式来运行PHP就必须用Thread Safe(线程安全)的版本。因为windows申请进程开销较大,所以windows主要以多线程方式运行PHP,这时候需要线程安全的版本。
NTS:linux下,PHP使用多进程方式运行,所以可以选择nts版本。
ISAPI全称Internet Server Application Programming Interface,是一种微软Windows平台下的Web服务器扩展技术。它允许开发者编写动态网页应用程序并直接运行在Web服务器上,可以与Web服务器(如IIS)直接交互,提供更高效的性能和更灵活的功能扩展。通过ISAPI,开发者可以使用C++、Delphi等语言编写高性能的Web应用程序。
如果要开多线程:ZTS优于TS优于NTS。
本文被 PHP编程 专题收录