2

在我的 Java 程序中,我创建了一个OtpNode和一个“命名的” OtpMBox。每当通过此 mbox 接收到消息时,需要执行一些耗时的操作,然后将回复消息发送回。由于此操作非常耗时,因此不会立即处理发送到 mbox 的后续消息。

所以我想使用 Java 线程——每收到一条消息。我的问题是我是否也应该为收到的每条消息创建一个新的OtpMBox,还是可以在所有线程之间共享原始 OtpMBox?

4

4 回答 4

2

您可以共享 OtpMBox 对象并从多个线程中使用它。这个关于 jinterface 线程安全的 erlang-questions 线程讨论了这个问题。

此外,对于纯 Java 特定问题,您可能希望使用java.util.concurrent 中的 ThreadPoolExecutor来处理到达的消息。

于 2009-07-21T14:19:58.610 回答
1

我不确定我是否理解这个问题。您希望每个线程都有一个 OtpMBox 只是为了能够发送回复,或者这个长时间运行的操作是否必须能够接收更多消息?

如果是前者,您可以重用原来的 mbox。发送操作是同步的。

如果是后者,最好采用 Erlang 方式,为每个线程创建一个 mbox,并让来自 erlang 端的调用者知道它的 pid,以便它可以将数据发送到该 mbox。这是因为 jinterface 没有选择性接收,并且消息将到达首先唤醒的任何线程。

于 2009-07-20T07:27:19.783 回答
0

我对这些东西不是很熟悉,但我想你可能会做一些计算)你有为每个 java 线程运行 OtpMBox 的开销和控制系统(用 java 编写)的开销,这会要求不同的线程做一些工作和从他们那里得到结果。我相信java不是它的好工具)

你最好做 java-thread 'supervisor',它将使用 OtpMBox 启动一些(可能是 CPU 数量)数量的 'worker' java-threads 并将 OtpMBox 的 pids 发送到 erlang 系统。

--对不起我的英语

于 2009-03-06T11:18:42.697 回答
0

听起来您正在尝试使用 java 来做 erlang 擅长的事情。安全的轻量级多处理。是否有理由需要使用 java 进行处理,是否可以在 erlang 中完成?或者相反,如果java无论如何都要执行线程,为什么要使用erlang。我认为也许更多信息有助于回答这个问题。

于 2009-04-01T02:51:50.823 回答