scala - Scala 的 Actor 是否有任何非阻塞 IO 开源实现?

标签 scala frameworks parallel-processing nio

我有相当大的文件需要处理(500Meg+ zip 文件)。

Scala 的 actor 是否有任何非阻塞 IO 开源实现?

最佳答案

如果我的问题是正确的,那么您需要对文件进行非阻塞 IO。那我有个坏消息要告诉你。

蔚来

Java6 中的 Java NIO 仅在处理文件时支持阻塞操作。您可能会从 FileChannel 的事实中注意到这一点未实现 SelectableChannel 界面。 (NIO 确实支持套接字的非阻塞模式)

NIO.2 (JSR-203) 规范旨在克服 java.io 和 NIO 的许多当前限制,并为文件上的异步 IO 提供支持。据我了解,NIO.2 将与 Java 7 一起发布。

这些是 Java 库的限制,因此您在 Scala 中也会受到这些限制。

Actor

Actor 基于 Doug Lea 的 Fork-Join 框架(至少在分支 2.7.x 直到 version 2.7.7 中)。来自 FJTask class 的一句话:

There is nothing actually preventing you from blocking within a FJTask, and very short waits/blocks are completely well behaved. But FJTasks are not designed to support arbitrary synchronization since there is no way to suspend and resume individual tasks once they have begun executing. FJTasks should also be finite in duration -- they should not contain infinite loops. FJTasks that might need to perform a blocking action, or hold locks for extended periods, or loop forever can instead create normal java Thread objects that will do so. FJTasks are just not designed to support these things.



FJ 库在 Scala 中得到了增强,提供了一种统一的方式,允许参与者根据工作线程的数量和“库事件”(您可以在技术报告“Actors that unify Threads and Events”中找到解释)像线程或基于事件的任务一样运行菲利普·哈勒和马丁·奥德斯基)。

解决方案?

但是毕竟如果你在一个actor中运行阻塞代码,它的行为就像它是一个线程一样,所以为什么不使用普通的Thread用于阻止读取并将事件从该线程发送到基于事件的参与者?

关于scala - Scala 的 Actor 是否有任何非阻塞 IO 开源实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1512066/

相关文章:

go - 这是进行并行编程的更好方法吗?

Scala:结束 Stream.iterate

scala - 如何按顺序多次执行异步函数直到第一次成功

android - 隐藏状态栏

Java 字节码操作库建议

Python - 多处理意外结果

parallel-processing - PBS,刷新标准输出

scala - 如何在 Scala 3/Dotty 中实现像 MapK 这样的类型?

c++ - 如何使用类型级函数动态创建静态类型?

ios - 使现有项目成为框架 iOS