V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
ray1888
V2EX  ›  程序员

本机多进程 rpc 通讯问题

  •  
  •   ray1888 ·
    ray1888 · 2018-02-02 20:43:09 +08:00 · 4156 次点击
    这是一个创建于 2275 天前的主题,其中的信息可能已经有所发展或是发生改变。

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

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

    PS: 书是指《 Linux 多线程服务端编程 使用 muduo C++网络库 》
    woscaizi
        5
    woscaizi  
       2018-02-02 22:33:05 +08:00 via iPhone
    共享变量的方式耦合性太强了。
    billlee
        6
    billlee  
       2018-02-02 23:16:07 +08:00
    RPC 的意义在于接口标准化
    alqaz
        7
    alqaz  
       2018-02-03 01:23:15 +08:00
    统一,可扩展。
    wwqgtxx
        8
    wwqgtxx  
       2018-02-03 07:48:19 +08:00 via iPhone
    @ray1888 你自己看看 multiprocessing 模块的源代码不就知道了,multiprocessing.Manager()产生的就是 rpc 代理调用对象,当然如果你直接用 multiprocessing.Pipe()或者.Queue()那样的确是用进程管道实现的
    说到底 rpc 只是为了降低程序和操作系统的耦合度,如果用 socket 通讯这部分代码只用写一次,如果用本地 pipe,共享内存之类的方式,虽然效率能有所提高,但是适配的复杂度也大大提高了,很多情况下并没有必要
    ray1888
        9
    ray1888  
    OP
       2018-02-03 10:22:31 +08:00
    @wwqgtxx 好的,感谢,因为现在项目里面也有用 multiprocessing.manager 这个东西,待会认真看看这个代码
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   2247 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 00:44 · PVG 08:44 · LAX 17:44 · JFK 20:44
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.