我想用php实现multi_threading程序,我已经下载了pthread包并做了所有必需的配置。 然后我试图运行此代码:线程不能在php5中一起工作
<?php
class AsyncOperation extends Thread {
public function __construct($arg) {
$this->arg = $arg;
}
public function run() {
if ($this->arg) {
$sleep = mt_rand(1, 10);
printf('%s: %s -start -sleeps %d' . "\n", date("g:i:sa"), $this->arg, $sleep);
sleep($sleep);
printf('%s: %s -finish' . "\n", date("g:i:sa"), $this->arg);
}
}
}
// Create a array
$stack = array();
//Iniciate Miltiple Thread
foreach (range("A", "D") as $i) {
$stack[] = new AsyncOperation($i);
}
// Start The Threads
foreach ($stack as $t) {
$t->start();
}
?>
但我每次运行该代码时,我得到类似的东西:
4:29:47pm: A -start -sleeps 1
4:29:48pm: A -finish
4:29:47pm: C -start -sleeps 3
4:29:50pm: C -finish
4:29:47pm: D -start -sleeps 4
4:29:51pm: D -finish
4:29:47pm: B -start -sleeps 7
4:29:54pm: B -finish
另一个运行:
5:29:21pm: A -start -sleeps 1
5:29:22pm: A -finish
5:29:21pm: B -start -sleeps 3
5:29:24pm: B -finish
5:29:21pm: D -start -sleeps 8
5:29:29pm: D -finish
5:29:21pm: C -start -sleeps 9 5:29:30pm: C -finish
,你可以看到线程似乎不在同一时间工作的问题,每当线程启动时,其他线程在完成之前不会启动。我注意到的有趣的事情是线程总是从最小的睡眠时间开始排序!
我期待一些像这样运行:
12:00:06pm: A -start -sleeps 5
12:00:06pm: B -start -sleeps 3
12:00:06pm: C -start -sleeps 10
12:00:06pm: D -start -sleeps 2
12:00:08pm: D -finish
12:00:09pm: B -finish
12:00:11pm: A -finish
12:00:16pm: C -finish
可能有人告诉我,我怎样才能得到想要的运行?我正在使用php5。 注:我从本网站的其他帖子得到的代码: check it up
非常感谢提前。
[pthreads for PHP apache不执行并行线程]可能的重复(http://stackoverflow.com/questions/15156503/pthreads-for-php-apache-not-execute-parallel-threads) – DaveRandom