◆ マルチプロセス

またも進化してしまいました
今回はマルチプロセスです

JavaScript ってマルチプロセスだっけと思うかもしれないですが イメージはワーカーとかです

JavaScript はシングルスレッドな言語なのでメイン部分と非同期処理のコールバックは 1 つのスレッドで実行されていて 並列で処理されることはないです
しかし 非同期処理の裏側部分 データベースにアクセスしたりとか Node.js だとなにかドライバ周りのとか Chrome のエクステンションのコールバックが必要な関数色々とかは メインのスレッドではなくバックグラウンドでメインのスレッドと並列に処理がされていて それが終わったらメインのスレッドで結果を受け取って コールバック関数にその結果を入れて実行されているはずです

シングルスレッドだからファイルの読み書きや DB アクセスなどの遅くなる可能性がある処理は別のところに任せて UI 部分と関係するメインのスレッドは時間のかかる処理がないようにしてるわけですから することないときだからってメインのスレッドで DB にアクセスなんてしてたらダメですよね
その間に ユーザがなにか操作するかもしれないわけですし



ということで 非同期処理の裏側を実行できるようにしたのが今回の進化です
前の非同期処理は メインのスレッドですることがなくなってから バックグラウンド部分もメインのスレッドで完全にシングルスレッドとして実行していました

だって PHP ですし ユーザの入力が途中で入らないから特に困らなそうですし


そのままでも良さそうだったのですが マルチプロセスにしてみたいなー と思っていたのでやってしまいました
それぞれが完全に別プロセスとして起動します
コマンドで php 自体を実行してるのでスレッドじゃなくてプロセスです

JavaScript だと ファイルの読み書きとかで専用のスレッドがあって 同時に複数開いてもそのスレッドが順に処理していて スレッドが同時にいっぱい作られるわけではないそう (このへんまでは詳しくないです)

なので そこは今回の PHP で作ったのと異なってます
非同期処理の用途ごとに専用のプロセスを置いて それぞれがシングルスレッドで順々に処理するっていうのも大変そうだったのでパスしました


サンプルで localStorage を同期版と非同期版作っていますが 非同期版のバックグラウンド処理はファイルロックまでちゃんと作ってないサンプルなので 運が悪いと同時に処理した時に片方が消えていたりする可能性があります


phjs.php