我刚开始学习一门函数式语言(Scala),其中一个声明/建议是,“在进行多线程处理时,您应该尝试使用react
而不是”方法。recieve
为了清楚起见,react
它不返回任何值,而是返回recieve
。他们有自己的理由支持这项建议。由于 Scala 在 JVM 上工作。让我好奇的是,使用是否比在 Java 中Callable
使用更昂贵?Runnable
有没有人有相同的经验或对此发表评论?
我刚开始学习一门函数式语言(Scala),其中一个声明/建议是,“在进行多线程处理时,您应该尝试使用react
而不是”方法。recieve
为了清楚起见,react
它不返回任何值,而是返回recieve
。他们有自己的理由支持这项建议。由于 Scala 在 JVM 上工作。让我好奇的是,使用是否比在 Java 中Callable
使用更昂贵?Runnable
有没有人有相同的经验或对此发表评论?
Runnable 和 Callback 具有相同的“性能”,因为它们只是Interfaces。
这两个接口有细微的 API 差异——必须使用与消费 API 兼容的类型;就这些。
这与 Scala 或 Actor 中的react vs. recieve无关;问题框本身进入错误的角落。
好吧,你真的在这里混合了不同的概念。
使用react
代替的原因receive
是每个具有 a 的参与者都receive
需要自己的线程。所以每个演员都有一个线程。 react
另一方面,由线程池处理,这些线程将在该actor上运行该消息,然后继续到下一个actor和消息。(这实际上只允许你做出反应——你不能等待一定的时间。)
另一方面,Runnable
andCallable
接口只是在 Java 中打包代码的方法,具体取决于您是希望它做一些事情(Runnable
)还是返回一个值(Callable
)。接口本身在性能上没有任何差异,但是为了将Callable
返回值返回给您,还需要做一些额外的事情,所以如果您可以用任何一种方式编写它,您最好使用一些只需要一个Runnable
. (实际上,这可能意味着启动一个线程而不是一个未来。)但是实现细节非常重要,以至于您不能仅根据接口提出任何一般性建议。你需要知道接口是如何在你调用的实际类中实际使用的。