首页 » 网站建设 » php线程延迟技巧_3分钟短文 PHP多线程没用过你可能错过了计算机最好的时代

php线程延迟技巧_3分钟短文 PHP多线程没用过你可能错过了计算机最好的时代

访客 2024-11-30 0

扫一扫用手机浏览

文章目录 [+]

叨教,PHP 能不能利用多线程?如果能,怎么实现的?

本文就带你打开这个疑问。

php线程延迟技巧_3分钟短文  PHP多线程没用过你可能错过了计算机最好的时代

学习韶光

这个问题的答案是肯定的,PHP 可以利用多线程。
我们借助于 pthreads 实现:

php线程延迟技巧_3分钟短文  PHP多线程没用过你可能错过了计算机最好的时代
(图片来自网络侵删)

该项目供应了与基于Posix Threads的PHP兼容的多线程。

有啥亮点没?下面这些全是:

一个易于利用,快速学习的面向工具的PHP 7.2线程API实行所有预定义和用户声明的方法和函数,包括闭包。
包括现成的同步无限的可能性...

须要一些扩展的根本的支持,PHP 7.2 及以上版本,ZTS Enabled ( Thread Safety ),Posix Threads Implementation。

还有一些把稳事变:

pthreads是一个面向工具的API,它供应了PHP中多线程所需的所有工具。
PHP运用程序可以创建,读取,写入,实行并与线程,赞助工具和线程工具同步。

警告:pthreads扩展名不能在Web做事器环境中利用。
因此,PHP中的线程应仅保留给基于CLI的运用程序利用。

命令行运用脚本完备适用,这也与我们编写 Bash,Python等等类似。
下面举一个例子:

然后实行一次:

再实行一次:

实际利用

上面的代码是个示例性子的运用,仅仅是为了展示多线程运行。
下面来一段业务代码。

该类仿照一个url要求。
由于网络问题,有可能失落败,或者不愿定返回韶光,以是适宜并行。
接着我们利用该类进行多网络要求并发。
为了减轻系统负荷,利用微秒延时。

$t = microtime(true);$g = new AsyncWebRequest(sprintf("http://www.google.com/?q=%s", rand() 10));

实例化之后,我们发起要求:

if ($g->start()) { printf("Request took %f seconds to start ", microtime(true) - $t); while ( $g->isRunning() ) { echo "."; usleep(100); } if ($g->join()) { printf(" and %f seconds to finish receiving %d bytes\n", microtime(true) - $t, strlen($g->data)); } else printf(" and %f seconds to finish, request failed\n", microtime(true) - $t);}其他方案

如果不用 pthreads 库供应的能力,该怎么写并行的多任务呢?实在 PHP 供应了一个 popen 函数,用于打开进程文件指针。

popen 返回一个和 fopen 所返回的相同的文件指针,只不过它是单向的(只能用于读或写)并且必须用 pclose 来关闭。
此指针可以用于 fgets,fgetss 和 fwrite。
当模式为 'r',返回的文件指针即是命令的 STDOUT,当模式为 'w',返回的文件指针即是命令的 STDIN。

直接上代码:

for ($i=0; $i<10; $i++) { // 打开10个进程 for ($j=0; $j<10; $j++) { $pipe[$j] = popen('script2.php', 'w'); } // 等待完成 for ($j=0; $j<10; ++$j) { pclose($pipe[$j]); }}

大家看到了实现的方法与 pthreads 完备不同,这段代码仍旧是壅塞运行,只不过同时打开10个进程,并走运行。

并行与多线程完备不同。
不过,可视作一个大略的办理方案吧。

写在末了

经由上述两种实现方法,大家该当对付多线程,多进程,并行这些观点有一些认识了。

Happy coding :_)

我是 @程序员小助手 ,持续分享编程知识,欢迎关注。

标签:

相关文章

PHP实现文字转图片的代码与应用

图片处理技术在各个领域得到了广泛应用。在PHP编程中,文字转图片功能同样具有很高的实用价值。本文将针对PHP实现文字转图片的代码进...

网站建设 2025-03-02 阅读1 评论0

NAN0017探索新型纳米材料的奥秘与应用

纳米技术作为一门新兴的交叉学科,近年来在材料科学、生物医学、电子工程等领域取得了举世瞩目的成果。其中,NAN0017作为一种新型纳...

网站建设 2025-03-02 阅读5 评论0

L26368XO代码其背后的创新与突破

编程语言在各个领域发挥着越来越重要的作用。在众多编程语言中,L26368XO代码以其独特的优势,成为了业界关注的焦点。本文将深入剖...

网站建设 2025-03-02 阅读1 评论0

HTML字体背景打造个化网页设计的关键元素

网页设计已经成为现代网络传播的重要手段。在众多网页设计元素中,字体和背景的搭配尤为关键。本文将从HTML字体背景设置的角度,探讨其...

网站建设 2025-03-02 阅读1 评论0