php で multi_threading プログラムを実装しようとしています。pthread パッケージをダウンロードし、必要な構成をすべて行いました。そして、私はこのコードを実行しようとしました:
<?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を使用しています。注:このウェブサイトの他の投稿からコードを取得しました: 確認してください
よろしくお願いします。