2008-11-12 5 views
2

Dans mon programme Java, je crée un OtpNode et un "named" OtpMBox. Chaque fois qu'un message est reçu via cette mbox, une opération fastidieuse doit être effectuée après laquelle un message de réponse est renvoyé. Comme cette opération prend du temps, les messages suivants envoyés à la mbox ne seront pas traités immédiatement. Je veux donc utiliser des threads Java - un par message reçu. Ma question est que je devrais également créer un nouveau OtpMBox pour chaque message reçu ou le OtpMBox original peut-il être partagé parmi tous les threads?Erlang JInterface - OtpMBox est-il sûr pour les threads?

Répondre

0

Je ne suis pas vraiment familier avec ce genre de choses, mais je suppose que vous pouvez faire des calculs) Vous avez un surcoût de fonctionnement de OtpMBox pour chaque thread Java et de surcharge du système de contrôle (écrit en java) qui demanderait des threads différents faire du travail et en tirer des résultats. Je crois que Java n'est pas un bon outil pour ça)

Il vaut mieux faire java-thread 'supervor' qui va commencer (peut-être le nombre de processeurs) quantité 'worker' java-threads avec OtpMBox et envoyer les pids de OtpMBox à erlang système.

--sorry mon anglais

0

On dirait que vous essayez d'utiliser Java pour faire ce que Erlang est bon. Multiprocesseur léger et sûr. Y at-il une raison pour laquelle vous avez besoin d'utiliser Java pour le traitement pourrait-il être fait en erlang à la place? Ou inversement pourquoi utilisez-vous l'erlang si le java va faire des threads de toute façon. Je pense que peut-être plus d'informations seraient utiles pour répondre à cette question.

1

Je ne suis pas sûr de comprendre la question. Vous voulez un OtpMBox par thread juste pour pouvoir envoyer la réponse, ou cette opération de longue durée doit-elle pouvoir recevoir d'autres messages? Si le premier, vous pouvez réutiliser la mbox d'origine. L'opération d'envoi est synchronisée. Si ce dernier, il serait préférable de le faire de la manière Erlang, en créant une mbox pour chaque thread et en informant l'appelant du côté erlang de son pid afin qu'il puisse envoyer des données à cette mbox. C'est parce que jinterface n'a pas de réception sélective et les messages arriveront à n'importe quel thread qui se réveillera en premier.