概要

メッセージパッシングは、計算機科学における通信パラダイムの一つであり、あるコンポーネント(スレッド、プロセス、ノード)が、離散的なデータ片であるメッセージを別のコンポーネントへ送る仕組みを指す。メッセージには通常、ヘッダーとペイロードが含まれ、動作の調整、値の受け渡し、イベントの通知などに用いられる。共有メモリ方式とは異なり、メッセージパッシングでは可変な状態を共有するのではなく、明示的な通信によって情報をやり取りする。

方式と特徴

メッセージシステムは、タイミングやアドレス指定の意味づけによって異なる。一般的な区別には次のようなものがある。

  • 同期型(送受信がブロッキング)と非同期型(ノンブロッキング送信、バッファ付き配送)。
  • 直接指定(送信者が受信者を名指しする)と間接指定(メールボックス、トピック、キューを使う)。
  • 順序あり配送と順序なし配送、さらに信頼性あり保証とベストエフォート保証。

仕組みと代表的な実装

メッセージパッシングはさまざまな層に現れる。たとえば、オペレーティングシステムのIPCプリミティブ(パイプ、ソケット、ネイティブなメッセージキュー)、言語レベルの並行性モデル(アクターシステム、チャネル)、ミドルウェア(メッセージブローカー、publish-subscribeシステム)、そして高性能ライブラリ(並列計算向けのMPIなど)である。実装は要件に応じて、メッセージをバッファに保持したり、ディスクへ永続化したり、メモリ上でストリームとして流したりできる。

用途と例

典型的な用途には、並行タスクの調整、マイクロサービスの構築、イベント駆動型ユーザーインターフェースの実装、分散アプリケーションの構成がある。メッセージパッシングに基づくパターンとしては、リクエスト/レスポンス、publish/subscribe、作業キュー、イベントソーシングなどが挙げられる。アクター型のプログラミングでは、各アクターがメールボックスを持ち、メッセージを一度に一つずつ処理するため、並行性についての推論がしやすくなる。

設計上の考慮点とトレードオフ

メッセージベースのシステムを設計するには、シリアライズ形式、遅延とスループット、順序と配送の意味、冪等性、バックプレッシャー、ルーティング、セキュリティに注意が必要である。メッセージパッシングは、疎結合化と障害の封じ込めに向く一方、コピーのオーバーヘッド、一貫性を保つための複雑さ、監視や保持といった運用上の要件を増やすことがある。

区別と注目点

共有メモリと比べると、メッセージパッシングは直接的な競合を減らし、通信を明示化するため、並行性や分散性についての理解をしやすくする。これは現代の分散アーキテクチャや並行言語設計における基盤的な考え方であり、小さな組み込みシステムから大規模なサービスメッシュまで幅広く適用される。