並列処理システムの設計の勘所は「スレッドを使わない事」だ
システム設計に於いて、リソースの使用は大事な検討課題です。具体的には、リソース対象を特定し、そのリソースが何byteのデータか、そして権限はどうするのかまで考えなくてはなりません。そうしないと、ネットワーク設計・データベース設計・セキュリティ設計は出来ません。データ量が分からずとして、システムの拡張性と安定性は確保できませんし、使用するリソースと権限が分からずとしてセキュリティ対策は出来ません。となれば、同様の理由でデータベース設計も出来ません。
並列システムの設計では熟考するべきリソースは、現状のOSを考えると「スレッド数」と「CPUのコア数」です。OSの設計思想が変わり、スレッドモデル以外が選択されれば、もちろんその何かになります。それに関連して、データベース設計の視点から見ると、リクエスト数の内容が関係してきます。つまり、ハードウェアリソースと、それに対応付けられているソフトウェアリソースは重要なのです。
スレッド数の決定とくれば、多くの人は使用する事ばかりを考えてしまいます。しかしながら、リソースを使用する事ばかりを考えると、ハードウェアがそれに追いつきません。コア数が32個あっても足らず、64個、128個、256個...と「もっとコアを!」状態になるのは目に見えています。何故ならば、既に現状でスレッドを使い過ぎているからです。
タスクマネージャを見てみましょう。貴方のPCでどれだけのスレッド数が要求されているでしょうか?確認すれば32個以上のスレッドを使っているのが分かると思います。それを踏まえずとして、「このシステムで使うアプリケーションは、コア数を最大限に使用しよう」などととんでもない設計をすれば、アプリケーション数 * コア数となり、ハードウェアリソースが永遠に不足する酷いシステムが出来上がります。
とはいえ、「スレッドを使わないために絶対に並列処理をしない」などというのは馬鹿げた極論です。この様なシステム方針にしてしまうと、ハードウェアを増強したら処理が速くなると考えているエンドユーザーの期待を裏切ってしまいます。これはあってはならない事です。
相反する事を書いているように見えるかもしれませんが、当たり前の一つの真実を言っています。それは、リソースを考えて使用する事の大切さです。あればあるだけリソースを使いきるのは愚かな行為ですし、だからと言ってリソースを使わないのもまた愚かな行為です。リソースは、必要な時に必要なだけ使用しなくてはなりません。すなわち、リソースを使用する判断と、リソースを使わない判断もせねばならないのです。
最近は潤沢なハードウェアリソースと、便利な開発ツールを活かした富豪プログラミングと富豪設計が行われている節がありますが、どのような資源も無限ではありません。私達技術者はリソースのコントロールが求められています。今はまだ表面化していないかもしれませんが、電機事情が複雑になってきた時代背景を鑑みると、これからの時代はリソースのコントロールが当たり前の要求となるのは目に見えています。
私達は昔では考えられなかった、潤沢なハードウェアリソースとソフトウェアリソースを手にしています。しかし、それら豊富なリソースは有限であり、リソースを意識せずにシステム設計および実装をすると、何時か化けの皮がはがれます。従って、技術者は常にリソースのコントロールが求められていると考えるのが妥当です。プロフェッショナルらしく、リソースを巧みに使用する技術者を一緒に目指しましょう。
そうすれば私達情報技術者は、尊敬のまなざしを受ける職業になるでしょう。