-
Notifications
You must be signed in to change notification settings - Fork 119
/
052-pthreads.phpt
95 lines (82 loc) · 1.83 KB
/
052-pthreads.phpt
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
--TEST--
Test pthreads integration
--SKIPIF--
<?php
require_once(dirname(__FILE__) . '/skipif.inc');
if (!extension_loaded ('pthreads')) {
die ('skip Requires pthreads extension');
}
if (!in_array ('acquire', get_class_methods ('ZMQContext')))
die ('skip');
if (!in_array ('getsocketcount', get_class_methods ('ZMQContext')))
die ('skip');
?>
--FILE--
<?php
$threads = 10;
class MyWorker extends Thread {
private $sendThisBack;
public function __construct($sendThisBack){
$this->sendThisBack = $sendThisBack;
}
public function run() {
$context = ZMQContext::acquire();
$socket = $context->getSocket(ZMQ::SOCKET_PUSH);
$socket->connect ("inproc://pthreads-test");
$socket->send($this->sendThisBack);
usleep(500 * 1000);
}
}
class MyServer extends Thread {
private $threads;
public function __construct($threads){
$this->threads = $threads;
}
public function run() {
$context = ZMQContext::acquire();
$socket = $context->getSocket(ZMQ::SOCKET_PULL);
$socket->bind("inproc://pthreads-test");
$socket->setSockOpt(ZMQ::SOCKOPT_HWM, 1000);
usleep(500 * 1000);
echo 'Receiving responses' . PHP_EOL;
$responses = array();
for ($i = 0; $i < $this->threads; $i++) {
$responses[] = $socket->recv();
}
sort($responses);
foreach($responses as $response){
echo $response . PHP_EOL;
}
}
}
$server = new MyServer($threads);
$server->start();
echo 'Server started' . PHP_EOL;
$requests = array();
for ($i = 0; $i < $threads; $i++) {
$requests[$i] = new MyWorker("thr_$i");
$requests[$i]->start();
}
echo 'Workers started' . PHP_EOL;
for ($i = 0; $i < $threads; $i++) {
$requests[$i]->join();
}
$server->join();
echo 'All requests pushed' . PHP_EOL;
echo "OK";
--EXPECT--
Server started
Workers started
Receiving responses
thr_0
thr_1
thr_2
thr_3
thr_4
thr_5
thr_6
thr_7
thr_8
thr_9
All requests pushed
OK