Erlang JInterface - OtpMBox线程安全吗?

时间:2008-11-12 11:23:02

标签: java multithreading erlang thread-safety jinterface

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

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

4 个答案:

答案 0 :(得分:2)

您可以共享OtpMBox对象并从多个线程中使用它。这erlang-questions thread about jinterface threadsafety讨论了这个问题。

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

答案 1 :(得分:1)

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

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

如果是后者,那么最好以Erlang方式进行,为每个线程创建一个mbox,让erlang端的调用者知道它的pid,以便它可以将数据发送到该mbox。这是因为jinterface没有selctive接收,消息将首先被唤醒到任何线程。

答案 2 :(得分:0)

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

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

- 对不起我的英文

答案 3 :(得分:0)

听起来你正在尝试使用java来做erlang擅长的事情。安全轻量级多处理。有没有理由为什么你需要使用java进行处理呢?它可以在erlang中完成吗?或者说,如果java要进行线程,你为什么要使用erlang?我想也许更多的信息可以回答这个问题。