我有一个使用 ZeroMQ 套接字进行进程间通信的 Java 程序。我有线程工作者做一些昂贵的工作,当他们完成他们的工作时,我想通过 inproc 套接字将该结果对象传递给“发送者”线程,以便它可以将对象发送给客户端。我见过一些例子,在 C++ 中这通常是使用指针来完成的,但在 Java 中没有指针,我不想序列化对象只是为了能够将对象传递给另一个线程。
我有哪些可能性?我只能有效地将“轻量级”值传递给套接字,例如字符串或原始类型。
谢谢!
无论您传递引用还是指针,它都是一样的。您可以通过数据结构在同一进程中的线程之间传递它,但不能通过套接字传递它并期望它在不同的进程中工作。
即在同一进程中的线程之间传递引用(或指针)不要使用 ZeroMQ,而是使用类似于 BlockingQueue 的东西。
我也有同样的疑问。这不是关于通过 zeromq 对另一个进程的 sendig 引用。那永远行不通。问题是对于 inproc 工作线程,发送消息意味着序列化和反序列化。对于字符串和原始类型,这是微不足道的,但对于大型业务对象,它没有意义(除非我错过了一个技巧)。
另一种解决方法是让工作线程将业务对象(或在您的情况下为结果)存储在缓存中,并将索引传递给“发送者”线程。这个“发送者”线程将从缓存中获取结果并将其发送给“客户端”。
但是我不确定这是否是预期目的。我在同一个论坛上提出了同样的问题。