通过ruby进程共享变量

23t*_*tux 5 ruby multithreading fork process

我正在写一个gem,我必须分叉两个进程,这两个进程正在启动两个webrick服务器.我想通过基类中的类方法启动此服务器,因为应该只运行这两个服务器,而不是多个服务器.在运行时,我想在这两个服务器上调用一些方法来更改变量.

我的问题是,我无法通过基类的类方法访问forks的实例变量.此外,我不能在我的基类中使用线程,因为我在使用另一个非线程安全的库.所以我必须将每个服务器分配到它自己的进程.

我尝试使用类变量,比如@@server.但是当我尝试通过基类访问这些变量时,它就是nil.我读过在Ruby中不可能在forks中共享类变量,我是对的吗?

那么,还有其他方法吗?我想过使用单身,但我不确定这是不是最好的主意.

jbr*_*jbr 8

当您分叉进程时,子进程和父进程的内存是分开的,因此您不能直接在它们之间共享变量.因此,单例类不适用于您的情况.

解决方案是IPC,Ruby支持管道套接字,这是两种最常用的IPC形式,至少在*NIX上.如果您需要更透明的接口,Ruby还支持分布式对象.

你选择什么取决于工作.如果您知道要在某些时候在多台计算机上拆分进程,请使用套接字或drb.如果没有管道.

这是Ruby中管道的简短介绍