困っていること
poolを利用しています。
以下phpコードですと、すべてのスレッドに最初に均等に割り振っている状態のようです。
1つのスレッドが長い処理を行うと、ほかのスレッド(ここでは全4つ)は作業が終わればプロセスが終了しているように見えております。(psで見ているぶんには)
そして、長い処理を行っているスレッドだけ独りでスタックされたjobを処理しているように見えております。
##知りたいこと
$p のうち1つ以上の作業が無い状態のスレッドが存在する確認方法がわかれば次の作業を渡したいです。($p->submit(...));を)
この具体的なやり方をご教示いただければと思います。
##やっていること
php
1# php5.3.29 2# pthreads 2.0.10 3class job extends Collectable 4{ 5 public $val; 6 7 public function __construct($arr) 8 { 9 $this->arr = $arr; 10 } 11 12 public function run() 13 { 14 usleep(250000); 15 passthru('実行コマンド',$ret); 16 $this->setGarbage(); 17 } 18} 19$p = new Pool(4); 20 21$tasks = array(); 22$tasks[] = array(1,2,3); 23$tasks[] = array(1,2,3); 24$tasks[] = array(1,2,3); 25$tasks[] = array(1,2,3); 26for ($i = 0; $i < count($tasks); ++$i) { 27 $p->submit(new job($tasks[$i])); 28} 29 30while($p->collect()); 31$p->shutdown();
回答1件
あなたの回答
tips
プレビュー