<?php
$n = 8;
$time_start = microtime(true);
$fp=array();
$work=array();
for($i=0;$i<$n;$i++){
$fp[$i]=popen(‘sleep 5′,’r’);
}
for($i=0;$i<$n;$i++){
$work[$i] = fread($fp[$i],1024);
}
for($i=0;$i<$n;$i++){
echo $work[$i];
pclose($fp[$i]);
}
echo microtime(true) – $time_start;
?>
これ、5秒で終わります。もちろん、sleepなのでほぼ同時に8つのプロセスが終了するからこれでもんだいを生じていないだけなんですけどw
やっていることは、5秒待機するsleep 5を8プロセス同時に稼働させたということです。
各プロセスの処理が均質なら、この程度のコードでもシングルスレッドのはずのPHPでもマルチプロセスで処理が可能です。そこまで考えるならpcntl_waitpid()を使う必要がありますね。
やりたいことは、4core/8thredのcore i7を積んだマシンで、100件規模の会員さんにメールないしはFAX送信を統一的に行いたい。メールは、まあメーリングリストの手法は数多あるので問題ないのですが、問題はFAX。結構処理の時間がかかりそう。せっかくのcore i7なので、マルチプロセスにする方法を考えました。まあ、モデムというか回線は一本なのでプリントキューに送った後は地道に一件づつ処理なのですが、送信するpsファイルを処理する部分はマルチプロセスにしたかったんですよね。
あ、FAXが送れると言うことはやれば窓付き封筒でいいなら郵送用の紙への印刷もできなくはないでしょう。ソフトから見れば、FAXもプリンタも印刷なので。