但我对LRPC – Lightweight RPC感到困惑.
显然,这些东西可以在同一台机器上加速RPC.正如文件I linked to所述:
Lightweight Remote Procedure Call (LRPC) is a communication facility
designed and optimized for communication between protection domains on
the same machine. In contemporary small-kernel operating systems,
existing RPC systems incur an unnecessarily high cost when used for
the type of communication that predominates-between protection domains
on the same machine. This cost leads system designers to coalesce
weakly related subsystems into the same protection domain, trading
safety for performance. By reducing the overhead of same-machine
communication, LRPC encourages both safety and performance.
我的问题是:如果你在同一台计算机上运行所有东西,那么RPC有什么意义呢. R代表REMOTE.如果你不是遥控器,那就把它称为LPC.我错过了什么?
本地RPC有几种用例,但一个非常直接的例子是服务器同时具有远程客户端和本地客户端.让我们考虑一个基于RPC的打印服务器:
>您可能将客户端放在远程主机上(例如,用于联网/共享打印服务器);
>您可能还有客户端位于服务器主机上(因此本地应用程序也可以打印).
显然,您不希望为远程客户端编写打印服务器,也为本地客户端编写单独的打印服务器.因此,如果体系结构或中间件允许设计可由远程客户端(远程RPC)和本地客户端(本地RPC)无差别地使用的打印服务器,则会好得多.
此时,体系结构或中间件确保了本地客户端和远程客户端的通用接口:在实践中如何实现进程间通信必须使应用程序开发人员完全透明.
但是,对于远程客户端和本地客户端使用相同的进程间通信技术可能效率低下.因此,RPC架构实现某种优化是相当普遍的,以便在服务器和客户端位于同一主机上时优化性能.本质上,这种优化非常类似于本地网络通信使用本地循环而不是在主机和网卡之间来回切换的事实.
轻量级RPC就是这样一种解决方案(它不是唯一的解决方案),可以为本地客户端优化RPC性能.在RPC架构中实现此优化时:
>可以为本地和远程客户端提供相同的RPC接口:>当其他客户端可能是远程客户端时,应用程序开发人员不必处理某些客户端可能是本地的问题;> RPC体系结构优化了本地服务器的内部调用,因此本地客户端不会受到某种远程IPC技术的惩罚,这种技术对于本地通信来说是次优的.