【问题标题】:java vs scala - reading in file on a separate threadjava vs scala - 在单独的线程上读取文件
【发布时间】:2012-09-29 02:13:34
【问题描述】:

我想知道就行业实践而言,最好的方法是使用多线程方法读取文件。在 Java 中,我会做以下事情:

class Reader {  Result readFile(File file, Listener callback) }
class Listener { void process(Result r) }

Reader 将生成另一个线程以生成结果,然后从工作线程中回调Listener。这是一个好方法吗?这将如何转化为 Scala,它可能还有其他更好的机制来实现这一点?

【问题讨论】:

  • 不清楚(至少对我而言)您是要读取一个文件还是多个文件。如果文件很多,那么 Kim Stebel 的答案会更好。如果它是需要在不同线程上处理结果的单个文件,那么另一个答案似乎更好。
  • “更好”是什么意思?更短的代码?可能是。性能更高?可能不会,因为 Scala 在幕后生成了大量代码。
  • 如果他想同时处理文件中的每一行,他仍然可以使用并行集合来做到这一点。

标签: java multithreading scala concurrency io


【解决方案1】:

如果您想要另一种方法,这对于Akka 来说似乎是一个很好的用例。

【讨论】:

  • Akka 只是一个 Actor 框架,可以从 Java 中使用 afaik。还有很多其他适用于 java 的演员框架。
【解决方案2】:

Scala 中的一种方法是使用并行集合。假设您有一系列文件:

files:Seq[File] = ...

您可以使用files.par将其变成并行集合,然后使用map进行处理。 Map 将在内部使用线程池同时处理部分序列。使用什么样的线程池可以configured

files.par.map(readFile).foreach(process)

【讨论】:

    猜你喜欢
    • 2023-04-01
    • 2023-03-14
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 2015-02-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多