Remote Procedure Call(RPC)

sequenceDiagram participant Client as Client(君) participant Server as Server(キッチン) Client->>Server: Request(料理を頼む) Server-->>Client: Response(料理が運ばれてくる)

弟子君
弟子君

博士、最近このRPCっていう用語をよく見るんだけど、これって一体何なんですか?


博士
博士

いい質問だね、弟子君。RPCは"Remote Procedure Call"の略で、これは遠隔地に存在するコンピュータの手続き(プロシージャ)を呼び出すことができるプログラミングの仕組みだよ。


弟子君
弟子君

それはどういうことですか?


博士
博士

それはね、例えば… あるレストランを想像してみてくれ。あなたがレストランで食事をする時、自分でキッチンに行って料理を作ることはないよね?


弟子君
弟子君

そうですね、それはウェイターさんに頼むんです。


博士
博士

その通り、君が食べたい料理をウェイターに伝えると、ウェイターはキッチンに行って料理人に君の要求を伝える。そして料理人はそれを作って、ウェイターがそれを君に運ぶ。君はキッチンに行かなくても料理を味わうことができる。


弟子君
弟子君

なるほど、それがRPCのイメージなんですね。


博士
博士

そう、まさにその通りだよ。プログラムがRPCを使うと、他のコンピュータ(キッチン)に存在するプロシージャ(料理)を呼び出すことができる。そのため、プログラム(君)は自分でその手続きを実行する代わりに、それを他のコンピュータに依頼(ウェイターに頼む)することができるのさ。


弟子君
弟子君

それなら、自分のPCだけでなく他のPCの力も借りて処理をすることができるんですね。レストランの例えがよく理解できました。ありがとうございます、博士!


弟子君
弟子君

博士、RPCの話は理解できたんですけど、それって同期処理になるからブロッキングが生じることもあるんですよね?そのブロッキングが起こると具体的にどういう問題があるんですか?


博士
博士

なるほど、君は既に深い部分まで考えているね。実際には、RPCは同期処理と非同期処理の両方をサポートしている。しかし、同期RPCを使うとブロッキングという問題が生じる可能性がある。


弟子君
弟子君

でも、同期処理ってどうしてブロッキングが生じるんですか?


博士
博士

それはね…あのレストランの例えをまた使わせてもらうね。君がウェイターに料理を頼んだとき、料理ができるまで待つ必要があるよね?


弟子君
弟子君

そうですね、だからその間に他のことはできない…あ!それがブロッキングなんですね。


博士
博士

その通り!同期RPCの場合、プログラム(君)が他のコンピュータ(キッチン)に処理を頼んだとき、その返答が来るまで待つ必要がある。その間に他の処理を進めることができない。これがブロッキングと呼ばれる現象だよ。


弟子君
弟子君

なるほど、だからブロッキングが起こると、その間に他の処理を進められないから、全体のパフォーマンスが下がるんですね。それを避けるために非同期処理を使えばいいんですね!


博士
博士

君の理解力はいつもすばらしいね、弟子君。その通りだよ、非同期RPCを使えば、レスポンスが返ってくるまで待つことなく、他の処理を進めることができる。これにより全体のパフォーマンスを維持することが可能になるんだ。


弟子君
弟子君

非同期RPCについても勉強してみます。ありがとうございました、博士!


コメント

タイトルとURLをコピーしました