PHPマルチスレッドの実装(PHPマルチスレッドクラス)
5693 ワード
PHPマルチスレッドの実装(PHPマルチスレッドクラス)
WEBサーバでPHPマルチスレッド機能を実現.
もちろん、マルチスレッドについて深く理解している人は、WEBサーバを通じて実現されたマルチスレッドがマルチスレッドのいくつかの効果を模倣するしかないことを知っています.本当の意味でのマルチスレッドではありません.
しかし、いずれにしても、私たちのニーズを満たすことができます.マルチスレッドのような機能が必要な場合は、このクラスを採用することができます.
view source
print ?
WEBサーバでPHPマルチスレッド機能を実現.
もちろん、マルチスレッドについて深く理解している人は、WEBサーバを通じて実現されたマルチスレッドがマルチスレッドのいくつかの効果を模倣するしかないことを知っています.本当の意味でのマルチスレッドではありません.
しかし、いずれにしても、私たちのニーズを満たすことができます.マルチスレッドのような機能が必要な場合は、このクラスを採用することができます.
view source
print ?
01.
/**
02.
* @title: PHP (Thread)
03.
* @version: 1.0
04.
* @author: phper.org.cn < [email protected] >
05.
* @published: 2010-11-2
06.
*
07.
* PHP :
08.
* require_once 'thread.class.php';
09.
* $thread = new thread();
10.
* $thread->addthread('action_log','a');
11.
* $thread->addthread('action_log','b');
12.
* $thread->addthread('action_log','c');
13.
* $thread->runthread();
14.
*
15.
* function action_log($info) {
16.
* $log = 'log/' . microtime() . '.log';
17.
* $txt = $info . "\r
\r
" . 'Set in ' . Date('h:i:s', time()) . (double)microtime() . "\r
";
18.
* $fp = fopen($log, 'w');
19.
* fwrite($fp, $txt);
20.
* fclose($fp);
21.
* }
22.
*/
23.
class
thread {
24.
25.
var
$hooks
=
array
();
26.
var
$args
=
array
();
27.
28.
function
thread() {
29.
}
30.
31.
function
addthread(
$func
)
32.
{
33.
$args
=
array_slice
(func_get_args(), 1);
34.
$this
->hooks[] =
$func
;
35.
$this
->args[] =
$args
;
36.
return
true;
37.
}
38.
39.
function
runthread()
40.
{
41.
if
(isset(
$_GET
[
'flag'
]))
42.
{
43.
$flag
=
intval
(
$_GET
[
'flag'
]);
44.
}
45.
if
(
$flag
||
$flag
=== 0)
46.
{
47.
call_user_func_array(
$this
->hooks[
$flag
],
$this
->args[
$flag
]);
48.
}
49.
else
50.
{
51.
for
(
$i
= 0,
$size
=
count
(
$this
->hooks);
$i
$size
;
$i
++)
52.
{
53.
$fp
=
fsockopen
(
$_SERVER
[
'HTTP_HOST'
],
$_SERVER
[
'SERVER_PORT'
]);
54.
if
(
$fp
)
55.
{
56.
$out
=
"GET {$_SERVER['PHP_SELF']}?flag=$i HTTP/1.1\r
"
;
57.
$out
.=
"Host: {$_SERVER['HTTP_HOST']}\r
"
;
58.
$out
.=
"Connection: Close\r
\r
"
;
59.
fputs
(
$fp
,
$out
);
60.
fclose(
$fp
);
61.
}
62.
}
63.
}
64.
}
65.
}
:
$thread = new thread(); $thread->addthread('func1','info1'); $thread->addthread('func2','info2'); $thread->addthread('func3','info3'); $thread->runthread();
:
addthreadはスレッド を し、 のパラメータは であり、その のパラメータ(オプション)は した に されるパラメータである.
runthreadはスレッドを する です.
:http://www.phper.org.cn/?post=113