php购物网站多线程,PHP多线程使用及实例详解(代码)

本文介绍了PHP多线程的使用,并通过实例分析了多线程类的具体实现方法及应用技巧。

多线程在处理重复性的循环任务,能够大大缩短程序执行时间。 多线程是java中一个很不错的东西。PHP语言本身是不支持多线程的。

一般来说可通过WEB服务器来实现PHP多线程功能,当然,对多线程有深入理解的人都知道通过WEB服务器实现的多线程只能模仿多线程的一些效果,并不是真正意义上的多线程。

另外, 既然是模拟的, 就不是真正的多线程,其实只是多进程。进程和线程是两个不同的概念。

但不管怎么样,它还是能满足我们的一些需要的,在需要类似多线程的功能方面还是可以采用这个类,代码如下:

/*PHP多线程类(Thread)*/

class thread {

var $hooks = array();

var $args = array();

function thread() {

}

function addthread($func)

{

$args = array_slice(func_get_args(), 1);

$this->hooks[] = $func;

$this->args[] = $args;

return true;

}

function runthread()

{

if(isset($_GET['flag']))

{

$flag = intval($_GET['flag']);

}

if($flag || $flag === 0)

{

call_user_func_array($this->hooks[$flag], $this->args[$flag]);

}

else

{

for($i = 0, $size = count($this->hooks); $i < $size; $i++)

{

$fp=fsockopen($_SERVER['HTTP_HOST'],$_SERVER['SERVER_PORT']);

if($fp)

{

$out = "GET {$_SERVER['PHP_SELF']}?flag=$i HTTP/1.1rn";

$out .= "Host: {$_SERVER['HTTP_HOST']}rn";

$out .= "Connection: Closernrn";

fputs($fp,$out);

fclose($fp);

}

}

}

}

}

使用方法,代码如下:

$thread = new thread();

$thread->addthread('func1','info1');

$thread->addthread('func2','info2');

$thread->addthread('func3','info3');

$thread->runthread();

说明:

addthread() 是添加线程函数,第一个参数是函数名,之后的参数(可选)为传递给指定函数的参数。

runthread() 是执行线程的函数。

PHP 多线程使用实例

PHP不支持多线程, APACHE可是支持的。

假设我们现在运行的是a.php这个文档. 但是我在程序中又请求WEB服务器运行另一个b.php,那么这两个文档将是同时执行的。

function runThread()

{

$fp = fsockopen('localhost', 80, $errno, $errmsg);

fputs($fp, "GET /a.php?act=brnrn");

fclose($fp);

}

function a()

{

$fp = fopen('result_a.log', 'w');

fputs($fp, 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "rn");

fclose($fp);

}

function b()

{

$fp = fopen('result_b.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')

{

runThread();

a();

}

else if($_GET['act'] == 'b') b();

?>

声明:如需转载,请注明来源于www.webym.net并保留原文链接:http://www.webym.net/jiaocheng/952.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值