本机多进程 rpc 通讯问题

2018-02-02 20:43:09 +08:00
 ray1888

向 golang、java 这些语言为什么如果需要本机的多进程通信都要用 rpc 呢?远程使用 rpc 我可以理解,但是不太能理解为什么单机也用 rpc 来完成远程调用?但是向 python,就可以直接通过多进程队列去共享变量的内容。因为比较少些静态语言,求写静态语言的大神们来解答

4158 次点击
所在节点    程序员
9 条回复
wwqgtxx
2018-02-02 20:53:56 +08:00
因为 python 的多进程队列本身也是用 rpc 实现的呀
wwqgtxx
2018-02-02 20:54:47 +08:00
其实准确说应该是 ipc,rpc 是建立在 ipc 基础上的
ray1888
2018-02-02 21:51:40 +08:00
@wwqgtxx 有相关的 pep 文档编号吗?我去看看
neoblackcap
2018-02-02 22:06:34 +08:00
linux 下进程间的同步机制有哪些? - 陈硕的回答 - 知乎
我的书第 3.4 节:进程间通信只用 TCP

PS: 书是指《 Linux 多线程服务端编程 使用 muduo C++网络库 》
woscaizi
2018-02-02 22:33:05 +08:00
共享变量的方式耦合性太强了。
billlee
2018-02-02 23:16:07 +08:00
RPC 的意义在于接口标准化
alqaz
2018-02-03 01:23:15 +08:00
统一,可扩展。
wwqgtxx
2018-02-03 07:48:19 +08:00
@ray1888 你自己看看 multiprocessing 模块的源代码不就知道了,multiprocessing.Manager()产生的就是 rpc 代理调用对象,当然如果你直接用 multiprocessing.Pipe()或者.Queue()那样的确是用进程管道实现的
说到底 rpc 只是为了降低程序和操作系统的耦合度,如果用 socket 通讯这部分代码只用写一次,如果用本地 pipe,共享内存之类的方式,虽然效率能有所提高,但是适配的复杂度也大大提高了,很多情况下并没有必要
ray1888
2018-02-03 10:22:31 +08:00
@wwqgtxx 好的,感谢,因为现在项目里面也有用 multiprocessing.manager 这个东西,待会认真看看这个代码

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/428076

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX