2 Stimmen

Erlang JInterface - ist OtpMBox thread-sicher?

In meinem Java-Programm erstelle ich eine OtpNode und eine "benannte" OtpMBox . Jedes Mal, wenn eine Nachricht über dieses Postfach empfangen wird, muss ein zeitaufwändiger Vorgang durchgeführt werden, nach dem eine Antwortnachricht zurückgeschickt wird. Da dieser Vorgang zeitaufwendig ist, werden nachfolgende Nachrichten, die an die mbox gesendet werden, nicht sofort verarbeitet.

Ich möchte also Java-Threads verwenden - einen pro empfangener Nachricht. Meine Frage ist, ob ich auch eine neue OtpMBox für jede empfangene Nachricht oder kann die ursprüngliche OtpMBox von allen Threads gemeinsam genutzt werden?

2voto

Christian Punkte 9358

Sie können das OtpMBox-Objekt gemeinsam nutzen und es von mehreren Threads aus verwenden. Dies erlang-Fragen-Thread über jinterface threadsafety erörtert die Angelegenheit.

Auch für die reinen Java-spezifischen Angelegenheiten sollten Sie wahrscheinlich die ThreadPoolExecutor aus java.util.concurrent für die Bearbeitung der eintreffenden Nachrichten.

1voto

Vlad Dumitrescu Punkte 892

Ich bin mir nicht sicher, ob ich die Frage verstehe. Wollen Sie eine OtpMBox pro Thread, nur um die Antwort senden zu können, oder muss diese langlaufende Operation auch weitere Nachrichten empfangen können?

Im ersten Fall können Sie die ursprüngliche mbox wiederverwenden. Der Sendevorgang wird synchronisiert.

Wenn letzteres der Fall ist, wäre es besser, es auf die Erlang-Art zu machen, eine mbox für jeden Thread zu erstellen und dem Aufrufer von der Erlang-Seite seine Pid mitzuteilen, damit er Daten an diese mbox senden kann. Der Grund dafür ist, dass jinterface kein selctive receive hat und die Nachrichten zu dem Thread gelangen, der zuerst aufwacht.

0voto

JLarky Punkte 9015

Ich kenne mich damit nicht wirklich aus, aber ich nehme an, Sie können einige Berechnungen anstellen) Sie haben den Overhead, OtpMBox für jeden Java-Thread laufen zu lassen, und den Overhead des Kontrollsystems (in Java geschrieben), das verschiedene Threads auffordert, etwas zu tun und die Ergebnisse von ihnen zu übernehmen. Ich glaube, Java ist kein gutes Werkzeug dafür.)

Sie besser tun Java-Thread "Supervisor", die einige (kann Anzahl von CPUs) Menge "Arbeiter" Java-Threads mit OtpMBox und senden OtpMBox's pids zu Erlang-System starten wird.

--Entschuldigung für mein Englisch

0voto

Jeremy Wall Punkte 21945

Es klingt, als ob Sie versuchen, Java zu verwenden, um das zu tun, was Erlang gut kann. Sicheres leichtgewichtiges Multiprocessing. Gibt es einen Grund, warum Sie Java für die Verarbeitung verwenden müssen, könnte es stattdessen in Erlang getan werden? Oder anders ausgedrückt, warum verwenden Sie Erlang, wenn Java sowieso Threads ausführt. Ich denke, dass vielleicht mehr Informationen bei der Beantwortung dieser Frage nützlich wären.

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X