質問編集履歴
6
訂正
test
CHANGED
File without changes
|
test
CHANGED
@@ -22,7 +22,7 @@
|
|
22
22
|
|
23
23
|
```php
|
24
24
|
|
25
|
-
# php5.3.
|
25
|
+
# php5.3.29
|
26
26
|
|
27
27
|
# pthreads 2.0.10
|
28
28
|
|
@@ -50,7 +50,7 @@
|
|
50
50
|
|
51
51
|
usleep(250000);
|
52
52
|
|
53
|
-
s
|
53
|
+
passthru('実行コマンド',$ret);
|
54
54
|
|
55
55
|
$this->setGarbage();
|
56
56
|
|
@@ -60,19 +60,21 @@
|
|
60
60
|
|
61
61
|
$p = new Pool(4);
|
62
62
|
|
63
|
-
$arrInput[1] = $argv[$i];
|
64
|
-
|
65
|
-
$arrInput[2] = $argv[$i];
|
66
|
-
|
67
63
|
|
68
64
|
|
69
65
|
$tasks = array();
|
70
66
|
|
71
|
-
|
67
|
+
$tasks[] = array(1,2,3);
|
72
68
|
|
73
|
-
|
69
|
+
$tasks[] = array(1,2,3);
|
74
70
|
|
71
|
+
$tasks[] = array(1,2,3);
|
72
|
+
|
73
|
+
$tasks[] = array(1,2,3);
|
74
|
+
|
75
|
+
for ($i = 0; $i < count($tasks); ++$i) {
|
76
|
+
|
75
|
-
$p->submit(new job($a
|
77
|
+
$p->submit(new job($tasks[$i]));
|
76
78
|
|
77
79
|
}
|
78
80
|
|
5
version 記載の追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -21,6 +21,10 @@
|
|
21
21
|
##やっていること
|
22
22
|
|
23
23
|
```php
|
24
|
+
|
25
|
+
# php5.3.3
|
26
|
+
|
27
|
+
# pthreads 2.0.10
|
24
28
|
|
25
29
|
class job extends Collectable
|
26
30
|
|
4
collectとshutdownの位置
test
CHANGED
File without changes
|
test
CHANGED
@@ -74,8 +74,8 @@
|
|
74
74
|
|
75
75
|
|
76
76
|
|
77
|
+
while($p->collect());
|
78
|
+
|
77
79
|
$p->shutdown();
|
78
80
|
|
79
|
-
while($p->collect());
|
80
|
-
|
81
81
|
```
|
3
訂正
test
CHANGED
File without changes
|
test
CHANGED
@@ -12,7 +12,7 @@
|
|
12
12
|
|
13
13
|
##知りたいこと
|
14
14
|
|
15
|
-
$p のうち
|
15
|
+
$p のうち1つ以上の作業が無い状態のスレッドが存在する確認方法がわかれば次の作業を渡したいです。($p->submit(...));を)
|
16
16
|
|
17
17
|
この具体的なやり方をご教示いただければと思います。
|
18
18
|
|
2
説明追加
test
CHANGED
File without changes
|
test
CHANGED
@@ -22,7 +22,37 @@
|
|
22
22
|
|
23
23
|
```php
|
24
24
|
|
25
|
+
class job extends Collectable
|
25
26
|
|
27
|
+
{
|
28
|
+
|
29
|
+
public $val;
|
30
|
+
|
31
|
+
|
32
|
+
|
33
|
+
public function __construct($arr)
|
34
|
+
|
35
|
+
{
|
36
|
+
|
37
|
+
$this->arr = $arr;
|
38
|
+
|
39
|
+
}
|
40
|
+
|
41
|
+
|
42
|
+
|
43
|
+
public function run()
|
44
|
+
|
45
|
+
{
|
46
|
+
|
47
|
+
usleep(250000);
|
48
|
+
|
49
|
+
system('実行コマンド', $output);
|
50
|
+
|
51
|
+
$this->setGarbage();
|
52
|
+
|
53
|
+
}
|
54
|
+
|
55
|
+
}
|
26
56
|
|
27
57
|
$p = new Pool(4);
|
28
58
|
|
1
説明を修正
test
CHANGED
File without changes
|
test
CHANGED
@@ -1,22 +1,24 @@
|
|
1
|
-
##
|
1
|
+
## 困っていること
|
2
2
|
|
3
3
|
poolを利用しています。
|
4
4
|
|
5
|
+
以下phpコードですと、すべてのスレッドに最初に均等に割り振っている状態のようです。
|
6
|
+
|
7
|
+
1つのスレッドが長い処理を行うと、ほかのスレッド(ここでは全4つ)は作業が終わればプロセスが終了しているように見えております。(psで見ているぶんには)
|
8
|
+
|
5
|
-
|
9
|
+
そして、長い処理を行っているスレッドだけ独りでスタックされたjobを処理しているように見えております。
|
6
10
|
|
7
11
|
|
8
12
|
|
9
13
|
##知りたいこと
|
10
14
|
|
11
|
-
$p のうち暇なスレッドが存在すれば次の作業を渡したいです。
|
15
|
+
$p のうち暇なスレッドが存在する確認方法がわかれば次の作業を渡したいです。($p->submit(...));を)
|
12
16
|
|
13
17
|
この具体的なやり方をご教示いただければと思います。
|
14
18
|
|
15
19
|
|
16
20
|
|
17
21
|
##やっていること
|
18
|
-
|
19
|
-
以下ですと、すべてのスレッドに最初に均等に割り振っている状態です。
|
20
22
|
|
21
23
|
```php
|
22
24
|
|