原文と比べた結果、この記事には多数の(または内容の大部分に影響ある)誤訳があることが判明しています。情報の利用には注意してください。正確な表現に改訳できる方を求めています。(2019年8月)
計算機科学におけるメッセージ (英: message) とは、情報の伝達を目的とする、順序付けられた文字列である。JISでは、情報理論および通信理論におけるmessageの訳語として通報[1]という用語が割り当てられている[注釈 1]。
メッセージパッシング (英: message passing) とは、並行計算・並列計算、オブジェクト指向、プロセス間通信で使われる通信方式である。プロセスもしくはオブジェクトといったモデルではメッセージ(ゼロ以上のバイト、複雑なデータ構造、プログラムコードも含む)を送ったり受けたりできる。メッセージを待つことによって同期することもできる。メッセージパッシングに基づく主なモデルとしてアクターモデルやプロセス代数がある。 メッセージパッシングは、ひとつもしくは多くの受信者 (receiver) に対して送信者 (sender) がデータを配送できる通信方法である。通報の形として遠隔メソッド呼び出し(英: remote method invocation; RMI)、シグナル、データパケットなどがある。メッセージパッシング機構を設計するとき、下記のような方針から設計方針を選択する。 重要な理論上の基礎であるアクターモデル、プロセス計算といった並行計算はメッセージパッシングを基礎としている。メッセージパッシングを使った並行システムは、言語内の機能としてメッセージパッシングする場合と言語からの一連のライブラリ呼び出しで実現する場合がある。前者の例は多くの分散オブジェクトシステムが含まれる。後者の例としては、カーネルとサーバブロック間でメッセージをやりとりするマイクロカーネルオペレーティングシステムや、高性能計算における Message Passing Interface がある。メッセージパッシングの概念は、グラフモデル Microsoft Windowsなどのオペレーティングシステムにおいて、メッセージとは、オペレーティングシステム上で動くアプリケーションに対して、オペレーティングシステムが管理しているデバイスあるいは別のプロセスやスレッドからの入力を伝えるために送られる、ひとかたまりのデータ集合のことである。メッセージを送受信することを通知とも呼ぶ。 オペレーティングシステムはメッセージをメッセージキューに保管し、アプリケーションはメッセージキューに保管されていたメッセージを受け取り、それを元に処理を行う。例えば「画面座標 (10, 20) の位置をマウスで左クリック」という情報をオペレーティングシステムが感知した場合、オペレーティングシステムはその情報をメッセージキューに保管する。アプリケーションはそのメッセージを受け取って対応した処理を行う。 アプリケーションは常にオペレーティングシステムからのメッセージを待機するようなイベント駆動方式のプログラムになっており、この一連のプログラムの機構をメッセージループという。メッセージキューを定期的に監視・確認するポーリング方式でメッセージループが実装されることもある。 分散オブジェクトや ONC RPC、CORBA、Java RMI、DCOM、SOAP、.NET Remoting、WCF、CTOS[要説明]、QNX Neutrino RTOS、OpenBinder、D-Bus のような遠隔メソッド呼び出しあるいはそれに類するものはメッセージパッシングシステムである。メッセージパッシングシステムは共有のないシステムと呼ばれている。なぜならば、メッセージパッシング型のシステムは、メッセージという抽象化によってその下位に存在する状態変化や実装などを隠蔽するものだからである。 メッセージパッシングモデルはデータを端末(アクター、プロセス、スレッドなど)に送信するような通達方式で、プログラミング言語で典型的に定義されている。そのようなメッセージングはSOAPによってWebサービスの中で使われている。この考え方はパケットより大きく、任意に信頼性や耐久性や安全性やトランザクションを追加したものを除く高いレベルのメッセージデータグラムである。メッセージもまた一般的に同じ向きのプロセス間通信に使われる。また別の一般的に使われる技術はストリームもしくはパイプで、そのようなデータは初歩的なデータアイテムの一連として送信される(仮想回線の高等レベルでは)。 同期メッセージパッシングシステムでは送信者と受信者がお互いにメッセージの転送を待つ。つまり、送信者は受信者がメッセージを受信するまでプログラムを再開できない。 同期通信は二つの利点がある。利点の一つ目はメッセージ転送において送信者と受信者で同期をとるため、プログラムを単純化できることである。利点の二つ目はバッファを必要としないことである。メッセージはいつでも受信側に保存される。なぜならば、送信者は受信者の準備が完了するまで送信を待つためである。 非同期メッセージパッシングシステムは受信者から送信者に準備ができる時間を待たずにメッセージを送る。非同期通信の利点はお互いに待つことがないので、お互いの計算処理をオーバーラップして行える。 同期通信は送信者がいつも受信者が続ける前にメッセージを応答したことを確実にする非同期通信をベースに築かれている。 非同期通信はバッファを必要とするが、そのバッファが満杯になると問題の原因になる。送信者をブロックするか今後のメッセージを切り捨てるか判断をしなければならない。送信者をブロックすれば、予期しないデッドロックを引き起こすかもしれない。メッセージを捨てた場合通信の信頼性は無くなる。 メッセージパッシングはプログラム間で情報を受け渡すためのもうひとつの通信方法、つまりCallと対比されるべきである。伝統的なCallにおいては、引数は典型的には一つ以上の汎用レジスタまたは引数のアドレスを内包しているパラメータリストを通じて、"callee" すなわち「呼び出し先」(receiver: 受信者)に渡される。この通信形式はメッセージパッシングと比較して少なくとも三つの大きな違いがある。 メッセージパッシングではどの引数も、新しいメッセージの中にコピーするのに十分なメモリを余計に必要とする。これはオリジナルの引数のサイズの大小によらない。したがって、もし引数のうちのひとつがwebページを記述する10,000オクテットのHTML文字列だとすると、受信プログラム(ローカルプログラムでないならば)に完全にコピーされなければならない(そしてさらに送信されなければならないだろう)。対照的に、callの手法ならば、それぞれの引数に対して4から8バイト分のアドレスしか必要としない。さらに汎用レジスタならば追加の記憶領域はゼロであり、送信時間もゼロである。これはもちろん分散システムでは不可能である。というのも、呼び出し元 (caller) のアドレス空間における(絶対)アドレスは、リモートプログラムでは通常意味をなさないからである。ただし、もしcalleeが前もってcallerのメモリの正確な(少なくとも一部の)コピーを有していたならば、相対アドレスが利用できるかもしれない。
概要
個々のメッセージの送受信を確実に行うかどうか
メッセージが送信した順序通りに受信されることを保証するかどうか
メッセージのやりとりは一対一、一対多(マルチキャストもしくはブロードキャスト)、多対一(クライアントサーバモデル)か
通信の同期が必要か
オペレーティングシステムにおけるメッセージ
メッセージパッシングシステムとモデル
同期通信と非同期通信
メッセージパッシングと関数呼び出しの比較
合計メモリ使用量
通信速度
ローカリティ
Size:30 KB
出典: フリー百科事典『ウィキペディア(Wikipedia)』
担当:undef