php多线程问题

1160166152 2019-01-29 11:07:05
<?php
// 实例1
class test{
public function run($index)
{
echo 'start:'.$index."<br />";
sleep(3);
echo 'end:'.$index."<br />";
}
}

$test = new test();
$test->run(1);
$test->run(2);


这个输出是
start:1
end:1
start:2
end:2

怎么才能让他们输出
start:1
start:2
end:1
end:2

求求你们帮帮忙 帮帮我解决一下
...全文
247 4 打赏 收藏 转发到动态 举报
写回复
用AI写文章
4 条回复
切换为时间正序
请发表友善的回复…
发表回复
水惊鱼 2019-02-01
  • 打赏
  • 举报
回复
多线程 是不是可以解决 多进多出的复杂队列? 不至于让某一大线程堵住? 不懂 呵呵 赌一把
xuzuning 2019-01-29
  • 打赏
  • 举报
回复
php 有第三方提供的线程操作扩展 线程在何时运行是由操作系统调度的,你不可能预知运行的顺序
yt_php 2019-01-29
  • 打赏
  • 举报
回复
最简单的是下面这种,基本的面向对象:

class Test{
	public static $jobs=[];

	public  function add($index){
		static::$jobs[] = $index;
		echo 'start:'.$index."<br />";
	}

	public function run(){
		foreach (static::$jobs as $index) {
			echo 'end:'.$index."<br />";
		}
	}

}

$test = new Test;

$test->add(1);
$test->add(2);
$test->run();
yt_php 2019-01-29
  • 打赏
  • 举报
回复
多线程我并不了解,要实现你要求的效果有很多方法。 1,利用__deconstruct()函数,在对象销毁时,依次执行任务。 2,利用中间件原理。 3,将任务存入存储介质,如文件,redis等,再开一个程序监听异步执行存储介质里的任务。 这里我用前两种实现一下吧。

interface Event{
	public function handle();
}

class Job implements Event{
	public $param;
	public function __construct($param){
		$this->param = $param;
	}
	public function handle(){
		echo 'end:'.$this->param."<br />";
	}
}

class Test{
	public static $jobs=[];

	public  function run(Event $job){
		static::$jobs[] = $job;
		echo 'start:'.$job->param."<br />";
	}

	public function __destruct(){
		foreach (static::$jobs as $job) {
			$job->handle();
		}
	}

}

$test = new Test;

$test->run( new Job(1) );
$test->run( new Job(2) );

interface Event{
	public function handle(Closure $next);
}

class Job implements Event{
	public $param;
	public function __construct($param){
		$this->param = $param;
	}
	public function handle(Closure $next){
		echo 'start:'.$this->param."<br />";
		$next();
	}

	public function boot(){
		echo 'end:'.$this->param."<br />";
	}
}

class Test{
	public $jobs=[];

	public function __construct(array $arr){
		foreach ($arr as $v) {
			$this->jobs[] = new Job($v);
		}
	}

	public function run(){
		$pipes=array_reverse($this->jobs);
		$firstSlice=function(){
			foreach ($this->jobs as $job) {
				echo $job->boot();
			}
		};

		call_user_func(
		array_reduce($pipes,$this->getSlice(),$firstSlice)
		);
	}

	function getSlice(){
		return function ($stack,$pipe){
			return function () use ($stack,$pipe){
				return $pipe->handle($stack);
			};
		};
	}

}

$arr = [1,2];
$test = new Test($arr);
$test->run( );

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧