【问题标题】:moving from java threads to scala actors从 java 线程迁移到 scala actor
【发布时间】:2011-12-21 01:10:35
【问题描述】:

我有一个 java 应用程序,它有各种代理(Java 算法)来监听消息并处理它们。每个代理在单个线程上执行这些消息,这些消息被添加到阻塞队列中以逐个处理。对单个消息的这种处理涉及与远程机器的 i/o。由于 java 中固有的Bug,加班时,这些线程会被一一挂起。他们说该错误已修复,但事实并非如此,我已经在所有最新的 Java 版本上运行它并尝试了一个月的所有解决方法。所以,我计划转向 scala 演员。

以下是我的问题:

  1. 上述要求在 scala 演员中是否可行,它会克服 java 错误吗?

  2. 如果可能的话,简单概述一下如何做:)

    P.S : 我一直在阅读 scala 编程书以获得语法和基本功能。

【问题讨论】:

    标签: java multithreading scala scala-2.8 actor


    【解决方案1】:

    您引用的错误是 jvm 错误。因此,如果您在同一个 JVM 上使用“相同”代码,您仍然会遇到该错误。 Scala 仍然在 JVM 上运行,因此您仍有可能遇到相同的错误。

    Scala Actors 可能不会以同样的方式运行 JVM。但是你不能保证什么。试试看。

    【讨论】:

    • 是的 scala 在 jvm 上运行。但不使用java使用.so的共享状态和锁模型,我相信使用actor并发模型应该可以克服提到的错误
    • @sanre6 是的,这就是我的观点。但你不知道,直到你尝试。
    【解决方案2】:

    如果您刚刚开始使用演员模型,我强烈建议您使用来自akka.io 的演员包。当我开始涉足时,我在使用标准 Scala 远程演员库时遇到了一些问题。我还听说过一段时间,akka actor 实现将取代 Scala 标准库中当前的实现。

    这并没有解决您的问题本身,但是编写基于 Actor 的并发程序比管理您自己的关键部分要简单得多——至少这是我的经验。

    【讨论】:

      【解决方案3】:
      1. 对于第一个问题,答案是肯定的,scala actor 确实克服了由于其 actor 并发模型而提到的错误。我在过去 2 周内一直在使用它,没有停机。 Actor 是轻量级的,易于扩展,并且比我在 java 中的线程代理执行得更快。内存消耗也奇怪地下降了。

      2. 现在对于实现部分,一旦您了解了 scala 的基础知识,编写 actor 就很容易了。如果你使用 eclipse + maven 插件m2eclipse-scala 是开始的地方。我已经使用那里提到的步骤成功地构建了一个 osgi 包。 scala ide 是一项正在进行的工作,编写代码有点痛苦。

      3. 现在对于 scala 演员来说,使用他们的消息收件箱很困难。访问它们受到限制,并且当消息进入的速率高于参与者可以处理的速率时,它们似乎很容易耗尽内存。 Akka 演员在这里绝对有优势,让我们能够设置最大邮箱大小,邮箱推送超时..等等,或者您可以拥有自己的收件箱实现。

      感谢您的帮助

      sanre6

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2010-10-31
        • 2012-03-12
        • 1970-01-01
        • 2013-03-11
        • 2012-09-06
        • 2013-05-08
        相关资源
        最近更新 更多