php多线程 PHP多线程没用过 你可能错过了计算机最好的时代

栏目:民生 2021-09-17 04:34:28
分享到:

其他语言都在抢着编译、虚拟机、多线程和提高效率。我们整天键入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个进程同时打开并并行运行。

并行与多线程完全不同。然而,这可以被视为一个简单的解决方案。

写在最后

在以上两种实现方法之后,我们应该对多线程、多进程和并行的概念有所了解。

快乐编码:_)

我是 @程序员小助手 ,持续分享编程知识,