当前位置: 首页 > 编程笔记 >

php多线程并发实现方法

田翰林
2023-03-14
本文向大家介绍php多线程并发实现方法,包括了php多线程并发实现方法的使用技巧和注意事项,需要的朋友参考一下

本文实例讲述了php多线程并发实现方法。分享给大家供大家参考,具体如下:

java里多线程就是一个new thread的事情,php依赖apache靠着linux底层有一个多线程的办法。

这里就来说说如果你无法操控apache的服务器,如何模拟php并发

<?php
if(function_exists('date_default_timezone_set')) {
  date_default_timezone_set('PRC');
}
function a()
{
 $time = time();
 sleep(3);
 $fp = fopen('result_a'.$time.'.log', 'w');
 fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");
 fclose($fp);
}
function b()
{
 $time = time();
 sleep(3);
 $fp = fopen('result_b'.$time.'.log', 'w');
 fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");
 fclose($fp);
}
if(!isset($_GET['act'])) $_GET['act'] = 'a';
if($_GET['act'] == 'a')
{
 a();
}
else if($_GET['act'] == 'b') b();
?>

以上代码,在本地写入一个文件。

如果你访问 localhost/a.php 在两个浏览器标签尽可能快的同时打开,发现两个文件创建时间相差为3秒

但是如果你访问localhost/a.php?act=b 另一个访问/a.php?act=a 你发现两个文件创建的时间几乎差不多。

对于apache来说同样的url意味着一个线程(我们或者说是进程),但是不同的URL意味着可以并发。

如果php内部有下载的动作

function runThread()
{
 down("http://localhost/test/a.php?act=a");
}
if($_GET['act'] == 'run')
{
 echo 'start:';
 runThread();
 echo ' End';
}

http://localhost/test/a.php?act=run

http://localhost/test/a.php?act=run&s=2

只要主访问的url不同,则认为是不同的进行,意味着并发。文件创建时间不为3秒

本地有Linux服务器的朋友也可以借助linux来进行模拟并发

<?php
for ($i=0;$i<10;$i++) {
echo $i;
sleep(5);
}
?>

上面存成test.php, 然后写一段SHELL代码

#!/bin/bash
for i in 1 2 3 4 5 6 7 8 9 10
do
php -q test.php &
done

更多关于PHP相关内容感兴趣的读者可查看本站专题:《PHP进程与线程操作技巧总结》、《PHP数组(Array)操作技巧大全》、《php排序算法总结》、《PHP常用遍历算法与技巧总结》、《PHP数据结构与算法教程》、《php程序设计算法总结》、《PHP数学运算技巧总结》、《php正则表达式用法总结》、《PHP运算与运算符用法总结》、《php字符串(string)用法总结》及《php常见数据库操作技巧汇总》

希望本文所述对大家PHP程序设计有所帮助。

 类似资料:
  • 本文向大家介绍PHP+shell实现多线程的方法,包括了PHP+shell实现多线程的方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了PHP+shell实现多线程的方法。分享给大家供大家参考。具体如下: 这里介绍如何借助shell脚本实现多线程。 先写个简单的php代码,这里为了让脚本执行时间更长,方便看效果,sleep一下,呵呵!先看下test.php的代码: PHP代码: 在看下s

  • 本文向大家介绍PHP中多线程的两个实现方法,包括了PHP中多线程的两个实现方法的使用技巧和注意事项,需要的朋友参考一下 PHP本身是不是支持多线程的,不过我们可以借助其他的方法来实现多线程,比如 shell 服务,比如 web 服务器,本文我们来讲讲这两个方法如何实现。需要的朋友可以来参考一下。 多线程是java中一个很不错的东西,很多朋友说在php中不可以使用PHP多线程了,其实那是错误的说法P

  • 本文向大家介绍Python Socket多线程并发原理及实现,包括了Python Socket多线程并发原理及实现的使用技巧和注意事项,需要的朋友参考一下 1.SocketServer模块编写的TCP服务器端代码  Socketserver原理图 服务端: 客户端:  2.基于Python Socketserver的实现的FTP程序  服务端:  客户端: 以上就是Python Socket多线程

  • 本文向大家介绍使用java的HttpClient实现多线程并发,包括了使用java的HttpClient实现多线程并发的使用技巧和注意事项,需要的朋友参考一下 说明:以下的代码基于httpclient4.5.2实现。 我们要使用java的HttpClient实现get请求抓取网页是一件比较容易实现的工作: 要多线程执行get请求时上面的方法也堪用。不过这种多线程请求是基于在每次调用get方法时创建

  • 本文向大家介绍php三种实现多线程类似的方法,包括了php三种实现多线程类似的方法的使用技巧和注意事项,需要的朋友参考一下 1、curl_multi方法 当需要多线程的时候,可以用curl_multi一次性请求多个操作来完成,但curl走的是网络通信,效率与可靠性就比较差了的。 2、通过stream_socket_client 方式 3、通过多进程代替多线程 以上就是为大家分享的三种php实现多线

  • 本文向大家介绍实例讲解php实现多线程,包括了实例讲解php实现多线程的使用技巧和注意事项,需要的朋友参考一下 我们首先来看一个示例 当执行上述操作时,即使在耗时的处理结束之前也显示处理完成。 由于“ > / dev / null& ”返回的值丢失,我们不会等待响应。 因此,处理完成指示比耗时处理更快。 但是,该方法不知道耗时的处理何时结束。 不要忘记考虑采取日志的执行,登录DB等方法向用户传递执