переход от ява потоков к актерам скала - PullRequest
4 голосов
/ 03 ноября 2011

У меня есть Java-приложение, в котором есть различные Агенты (Java Algo's), которые прослушивают сообщения и обрабатывают их. Каждый агент выполняет эти сообщения в одном потоке, где эти сообщения добавляются в очередь блокировки для обработки по одному. Эта обработка одного сообщения включает ввод-вывод с удаленного компьютера. Со временем эти потоки зависают один за другим из-за присущей ошибки в Java. Они говорят, что ошибка исправлена, но это не так, я запустил ее на всех последних версиях Java и пробовал все обходные пути уже месяц. Итак, я планирую перейти к актерам scala.

Ниже приведены мои вопросы:

  1. Возможно ли вышеупомянутое требование для актеров скала и преодолеет ли ява-ошибку?
  2. Простой обзор того, как это сделать, если это возможно:)

    P.S .: Я читал программирование в scala book для получения синтаксиса и основных функций.

Ответы [ 3 ]

1 голос
/ 03 ноября 2011

Если вы только начинаете работать с моделью актера, я настоятельно рекомендую использовать пакет актеров из akka.io .Когда я начал заниматься, у меня были некоторые проблемы при использовании стандартной библиотеки удаленных актеров Scala.Я также слышал, что со временем реализация akka actor заменит текущую реализацию в стандартной библиотеке Scala.

Это не решает ваш вопрос per se , но написание на основе Actor происходит одновременнопрограммы намного проще, чем управлять своими критическими разделами - по крайней мере, таков мой опыт.

1 голос
/ 13 декабря 2011
  1. На первый вопрос ответ - да, акторы Scala преодолевают упомянутую ошибку благодаря своей модели параллелизма между актерами.Я использовал его в течение последних 2 недель без простоев.Актеры легки, легко масштабируются и, безусловно, работают быстрее, чем мои резьбовые агенты в Java.Потребление памяти также уменьшилось, как ни странно.

  2. Теперь для части реализации писать актеров легко, если вы знаете основы scala.Если вы используете плагин eclipse + maven m2eclipse-scala - это то место, с которого нужно начинать.я успешно построил пакет osgi, используя шаги, упомянутые там.Scala ide находится в стадии разработки и немного труден для написания кода.

  3. Теперь для актеров scala трудно работать со входящими сообщениями своих сообщений.Доступ к ним ограничен, и они, похоже, легко выходят из памяти, когда скорость поступления сообщения выше, чем скорость, с которой может обработать субъект.Актеры Akka определенно имеют здесь преимущество, позволяя нам установить максимальный размер почтового ящика, mailbox-push-timeout..etc или вы можете иметь собственную реализацию входящих сообщений.

Спасибо за помощь

sanre6

1 голос
/ 03 ноября 2011

Ошибка, которую вы цитируете, является ошибкой jvm.Поэтому, если вы используете «тот же» код на той же JVM, вы все равно столкнетесь с ошибкой.Scala по-прежнему работает на JVM, поэтому есть вероятность, что вы столкнетесь с той же ошибкой.

Scala Actors, вероятно, не будут использовать JVM таким же образом.Но вы не можете ничего гарантировать.Попробуйте и посмотрите.

...