序
其他语言都在抢着编译、虚拟机、多线程和提高效率。我们整天键入PHP代码。除了Nginx调用php-fpm拉php文件进行解析,我们对多线程了解多少?
请问PHP可以使用多线程吗?如果是,如何做到?
这篇文章将带你打开这个问题。
学习时间
这个问题的答案是肯定的,PHP可以使用多线程。通过pthreads,我们意识到:
这个项目基于Posix Threads提供了与PHP兼容的多线程。
有哪些亮点?以下是全部:
一个易于使用、快速学习的面向对象的PHP 7.2线程应用编程接口
执行所有预定义的和用户声明的方法和函数,包括闭包。
包括现成的同步
无限的可能性...
需要一些扩展的基本支持,PHP 7.2及以上版本,支持ZTS,Posix线程实现。
还有一些注意事项:
Pthreads是一个面向对象的API,它提供了PHP中多线程所需的所有工具。PHP应用程序可以创建、读取、写入、执行和同步线程、助手对象和线程对象。
警告:pthreads扩展不能在Web服务器环境中使用。因此,PHP中的线程应该只为基于CLI的应用程序保留。
命令行应用程序脚本是完全适用的,这类似于我们写Bash、Python等等。这里有一个例子:
然后执行一次:
再次执行:
实际应用
上面的代码是一个示例应用程序,只是为了展示多线程。这是商业代码。
这个类模拟一个url请求。由于网络问题,它可能会失败或返回时间不确定,因此适合并行。然后,我们将这个类用于多网络请求并发。为了降低系统负载,采用了微秒级延迟。
$t =微时间;
$g =新的AsyncWebRequest * 10));
实例化之后,我们发起一个请求:
if){ 0
printf-$ t);
while){ 0
回声。;
usleep
}
if){ 0
printf - $t,strlen);
}其他
printf-$ t);
}
其他计划
如果不使用pthreads库提供的功能,如何编写并行多任务?实际上,PHP提供了一个popen函数来打开进程文件指针。
Popen返回与fopen相同的文件指针,只是它是单向的,必须用pclose关闭。该指针可用于fgets、fgetss和fwrite。当模式为' r '时,返回的文件指针等于命令的STDOUT,当模式为' w '时,返回的文件指针等于命令的STDIN。
直接编码:
对于;
}
//等待完成
对于;
}
}
如您所见,实现方法与pthreads完全不同。这段代码仍然被阻塞,只有10个进程同时打开并并行运行。
并行与多线程完全不同。然而,这可以被视为一个简单的解决方案。
写在最后
在以上两种实现方法之后,我们应该对多线程、多进程和并行的概念有所了解。
快乐编码:_)
我是 @程序员小助手 ,持续分享编程知识,