遠隔手続き呼出し

遠隔手続き呼出し（、リモートプロシージャコール、略してRPC）とは、プログラムから別のアドレス空間（通常、共有ネットワーク上の別のコンピュータ上）にあるサブルーチンや手続きを実行することを可能にする技術。その際に遠隔相互作用の詳細を明示的にコーディングする必要がない。つまり、プログラマはローカルなサブルーチン呼び出しと基本的に同じコードをリモート呼び出しについても行う。遠隔手続き呼出しを行うソフトウェアがオブジェクト指向プログラミングに基づく場合、遠隔手続き呼出しのことを リモート呼び出し（）あるいは リモートメソッド呼び出し （、）と呼ぶこともある（Java RMIなど）。
遠隔手続き呼出しには例えば、ONC RPCやDCE/RPCといった互いに非互換な様々な技術が存在する。
起源と歴史.
遠隔手続き呼出し (RPC) の考え方は、少なくともRFC 707が発表された1976年まで遡る。最初にRPCを商用に実用化したのはゼロックスの「」であり、1981年のことであった。UNIXで最初に広く使われるようになったRPC実装はサン・マイクロシステムズのRPC (ONC RPC) であり、NFSの基盤として使われた。ONC RPCは現在でも広く使われている。
もう一つのUNIXでの初期の実装として、アポロコンピュータの (NCS) がある。NCSは後にOSFの (DCE) でDCE/RPCの基盤として使われた。その約10年後、マイクロソフトがDCE/RPCを同社のRPC (MSRPC) の基盤として採用し、DCOMの実装に使った。同じころ（1990年代中盤）、継承機構を備えた分散オブジェクトに関するRPCパラダイムとして、パロアルト研究所のILUとのCORBAが登場した。
メッセージパッシング.
RPCクライアントは、実行する手続きと引数とを要求メッセージとして既知のリモートサーバに送信することで、RPCを開始する。同期型のRPCでは、サーバーがRPCを処理している間、クライアント側は応答があるまで待機する（呼び出しはブロックされる）。サーバー上でメッセージが処理され、応答がクライアントに戻ってくると、クライアント上のプロセスは処理を続行する。非同期型のRPCでは、クライアント側からの呼び出し後、クライアントは応答を待たず、次の処理を続行できる。サーバーからの応答はコールバックによって通知される。サーバーあるいはクライアントが低速の場合や、大量のデータを転送する必要がある場合などに、同期RPCでは制限および問題があるが、非同期RPCではそれらを解決することができる。
RPCプロトコルの実装によって微妙な違いをもった多くのバリエーションがあり、それらの間には互換性がない。
RPCが通常のローカル呼び出しと比べて違う点で重要なのは、予測できないネットワーク上の問題で失敗することがあるという点である。またそのような場合、手続きが実際に実行されたかどうかをクライアントが知ることができないことがある。そういったケースでは、二重に手続きを実行しても影響のない場合は容易に対処できるが、そうでなければ適切な対処は困難である。そのため、注意深く記述された低レベルなサブシステムの制限下で呼び出しコードを実行するという方法がよくとられる。各種操作にタイムアウト時間を設け、タイムアウト時間内に応答（処理）がなされなかった場合は例外をスローする方式になっているAPIもある。
標準コンタクト機構.
各種クライアントからサーバへのアクセスを可能とするため、いくつかの標準RPCシステムが開発されてきた。それらの多くはインタフェース記述言語 (IDL) を使って各種プラットフォーム間のRPCを可能としている。
IDLファイルはクライアントとサーバ間のインタフェースのためのコードを生成するのに使われる。最も一般的なツールとしてはRPCGENがある。