読者です 読者をやめる 読者になる 読者になる

XCの並列処理への準備状況について

 先ほどちらっと書いたけど、1コアの処理速度が頭打ちである以上、カーネルが持つスケジューラ上で振り分けの候補となるスレッドはスクリプトプログラミング上でもしっかり使って行くことになる。PHP6がスレッド処理を積まないという予想外の展開があったものの、XCは例のタスクシステムで並列処理に対応する予定で動いてきた。

 しかし試しようがないので orz 、一部を Ruby にポートして理論をテストした。が、タスク並列は典型的な並列処理のひとつだから、そりゃ動くでしょ……っていう……

 XCLと異なり、XCはタスクシステムで動くので、ブロックもモジュールも同階層で実行して、子タスクに移る前にJOINするというやり方でざっくりと並列化できる*1。またスレッド制限を設けて、兄弟の多いタスクの一人息子を、叔父のタスクと一緒に並列処理する方法が最終実装ですが、これの準備はやってません。このへんは今度図にします。

 XOOPS のような構造のアプリは並列化がむちゃくちゃ効くと思う。なにしろモジュールは元々独立しているので、並列に向いている。順序依存の処理も、XCコアのタスクシステムように、親子構造に展開すれば保障できる。

 もともと独立したモジュールを書く開発者が多いから、いくつかの(いつもの)決まりごとさえ守ってもらえれば、自動で並列化できますよとアナウンスできるのも大きい。付け加えると、RDMSがソフトウェアトランザクションを持ってるので、 Web アプリのコード側って、書き込み側も相当簡単にスレッドセーフにできる。

 逆に言えば同じアプリ構造のプロジェクトは当然のように並列化を進めてくるでしょうね。それゆえに、PHP6がスレッドをサポートしなかったのは衝撃だった。

 以前、どの言語を使用しても Web アプリケーションではアプリ自体の機能差がないと書いたけど、処理速度で大きく水を開けられる気が……*2

*1:描画はそれ以上に並列化できるが、Rubyポートはそこまで試してない

*2:とはいえ Ruby もグリーンスレッドなので、並列化したところでネイティブスレッディングほど速くなったりはしない