当前位置:首页 » 编程语言 » php安装pthreads

php安装pthreads

发布时间: 2023-08-19 00:40:51

A. php的thread是个什么情况

php通过扩展pthreads也可以支持线程上的操作,在mac下可以通过brew安装pthreads扩展。线程类要继承Thread类,而后实现run方法。

classcomputerextendsThread{

public$id;
public$runing=false;
public$params=null;

publicfunction__construct($id){
$this->id=$id;
$this->runing=true;
}

publicfunctionrun(){
while($this->runing){
if(is_null($this->params)){
echo"线程({$this->id})等待任务... ";
}else{
echo"线程({$this->id})收到任务参数::{$this->params}. ";
$this->params=null;
}
sleep(1);
}
}

}

不建议在PHP-FPM里使用多线程,写不好会导致工作进程频繁崩溃.使用PHP就应该转变思路,不要照搬Java那一套.异步处理耗时任务也不一定要使用多线程.你完全可以在PHP中用 pclose(popen('/path/to/task.php &', 'r')); 异步打开一个进程处理耗时的任务,PHP-FPM则返回信息给浏览器提示"正在处理",task.php这个cli脚本处理完成任务后,把数据库当前任务的状态标记为"完成",前端AJAX定时轮询到这个任务为"完成",则提示用户即可.

B. PHP使用Pthread实现的多线程操作实例

本文实例讲述了PHP使用Pthread实现的多线程操作。分享给大家供大家参考,具体如下:
<?php
class
vote
extends
Thread
{
public
$res
=
'';
public
$url
=
array();
public
$name
=
'';
public
$runing
=
false;
public
$lc
=
false;
public
function
__construct($name)
{
$this->res
=
'暂无,第一次运行.';
$this->param
=
0;
$this->lurl
=
0;
$this->name
=
$name;
$this->runing
=
true;
$this->lc
=
false;
}
public
function
run()
{
while
($this->runing)
{
if
($this->param
!=
0)
{
$nt
=
rand(1,
10);
echo
"线程[{$this->name}]收到任务参数::{$this->param},需要{$nt}秒处理数据.\n";
$this->res
=
rand(100,
999);
sleep($nt);
$this->lurl
=
$this->param;
$this->param
=
'';
}
else
{
echo
"线程[{$this->name}]等待任务..\n";
}
sleep(1);
}
}
}
//这里创建线程池.
$pool[]
=
new
vote('a');
$pool[]
=
new
vote('b');
$pool[]
=
new
vote('c');
//启动所有线程,使其处于工作状态
foreach
($pool
as
$w)
{
$w->start();
}
//派发任务给线程
for
($i
=
1;
$i
<
10;
$i++)
{
$worker_content
=
rand(10,
99);
while
(true)
{
foreach
($pool
as
$worker)
{
//参数为空则说明线程空闲
if
($worker->param=='')
{
$worker->param
=
$worker_content;
echo
"[{$worker->name}]线程空闲,放入参数{$worker_content},上次参数[{$worker->lurl}]结果[{$worker->res}].\n";
break
2;
}
}
sleep(1);
}
}
echo
"所有线程派发完毕,等待执行完成.\n";
//等待所有线程运行结束
while
(count($pool))
{
//遍历检查线程组运行结束
foreach
($pool
as
$key
=>
$threads)
{
if
($worker->param=='')
{
echo
"[{$threads->name}]线程空闲,上次参数[{$threads->lurl}]结果[{$threads->res}].\n";
echo
"[{$threads->name}]线程运行完成,退出.\n";
//设置结束标志
$threads->runing
=
false;
unset($pool[$key]);
}
}
echo
"等待中...\n";
sleep(1);
}
echo
"所有线程执行完毕.\n";
希望本文所述对大家php程序设计有所帮助。

热点内容
电脑服务器盘口顺序 发布:2025-02-05 12:40:20 浏览:663
mcpe服务器怎么开 发布:2025-02-05 12:40:13 浏览:835
linux文件记录 发布:2025-02-05 12:39:31 浏览:775
编程奖金计算 发布:2025-02-05 12:27:01 浏览:185
软件怎么去掉付费配置 发布:2025-02-05 12:26:17 浏览:504
安卓手机怎么下载谷歌商店apk 发布:2025-02-05 12:21:09 浏览:367
腾讯视频的缓存在哪里 发布:2025-02-05 12:21:03 浏览:710
安卓聊天记录未备份怎么恢复 发布:2025-02-05 12:05:02 浏览:953
海外搭建服务器可以连外网吗 发布:2025-02-05 11:49:21 浏览:64
少儿编程报名 发布:2025-02-05 11:49:13 浏览:308