【发布时间】:2012-07-19 13:24:07
【问题描述】:
假设我需要并行处理给定文件夹中的文件。在 Java 中,我将创建一个 FolderReader 线程以从文件夹中读取文件名,并创建一个 FileProcessor 线程池。 FolderReader读取文件名并将文件处理函数(Runnable)提交给pool executor。
在 Scala 中,我看到两个选项:
- 创建一个
FileProcessor演员池并使用Actors.Scheduler安排一个文件处理函数。 - 在读取文件名时为每个文件名创建一个actor。
这有意义吗?最好的选择是什么?
【问题讨论】:
-
并发硬盘访问不好。它会导致额外的磁头运动。不要那样做。
-
Actors 在这里用错了。
-
@DanielC.Sobral 谢谢。你能解释一下为什么以及改用什么吗?
-
@Michael Scala 中的 Actor 不能很好地处理阻塞任务,例如上述的任务。下面的一些答案提供了替代方案。
-
除非您的文件位于不同的设备上,或者您的处理工作非常受 CPU 限制,否则并行处理文件不太可能有用。另外,您使用“并发”一词,但我认为您的意思是“并行”。 Actor 用于并发,而不是并行。期货和并行数据结构用于并行。