在我的Java程序中,我創建了一個OtpNode和一個「named」OtpMBox。無論何時通過此mbox收到一條消息,都需要執行一些耗時的操作,然後回覆一條回覆消息。由於此操作非常耗時,發送到mbox的後續消息將不會立即處理。Erlang JInterface - 是OtpMBox線程安全的嗎?
所以我想使用Java線程 - 每個消息收到一個。我的問題是我是否也應該爲接收到的每條消息創建一個新的OtpMBox,或者是否可以在所有線程之間共享原始的OtpMBox?
在我的Java程序中,我創建了一個OtpNode和一個「named」OtpMBox。無論何時通過此mbox收到一條消息,都需要執行一些耗時的操作,然後回覆一條回覆消息。由於此操作非常耗時,發送到mbox的後續消息將不會立即處理。Erlang JInterface - 是OtpMBox線程安全的嗎?
所以我想使用Java線程 - 每個消息收到一個。我的問題是我是否也應該爲接收到的每條消息創建一個新的OtpMBox,或者是否可以在所有線程之間共享原始的OtpMBox?
我對這些東西並不十分熟悉,但我想你可能會做一些計算) 對於每個java-thread和控制系統(用java編寫)來說,你會有開銷來運行OtpMBox,做一些工作並從中得到結果。我相信java不是它的好工具)
你最好做java線程'主管',將啓動一些(可能是CPU數量)數量'工人'java線程與OtpMBox和發送OtpMBox的pids erlang系統。
- 對不起我的英語
這聽起來像你試圖用java做什麼Erlang是擅長。安全的輕量級多處理。是否有一個原因,你需要使用Java進行處理,而不是在erlang中完成呢?或者反過來說,爲什麼你使用erlang,如果java將要做線程呢。我想可能有更多的信息可以回答這個問題。
我不確定我是否理解這個問題。您需要每個線程的OtpMBox只是爲了能夠發送答覆,或者這個長時間運行的操作是否必須能夠接收更多消息?
如果是前者,則可以重用原來的mbox。發送操作是同步的。
如果是後者,最好是用Erlang的方法,爲每個線程創建一個mbox,並讓erlang方的調用者知道它是pid,以便它可以將數據發送到該mbox。這是因爲jinterface沒有有效的接收,並且消息將首先被喚醒。
您可以共享OtpMBox對象並從多個線程使用它。這erlang-questions thread about jinterface threadsafety討論此事。
另外,對於純java特定的問題,您可能需要使用ThreadPoolExecutor from java.util.concurrent來處理到達的消息。
好吧,但如何確定哪個線程迴應什麼? – Rekin 2010-10-27 07:31:38