我需要处理相当大的文件(500Meg+ zip 文件)。
Scala 的 actor 是否有非阻塞 IO 开源实现?
如果我的问题是正确的,那么您需要文件的非阻塞 IO。那么我有坏消息要告诉你。
NIO
Java6 中的 Java NIO 在处理文件时仅支持阻塞操作。你可能会从事实中注意到这一点FileChannel不执行SelectableChannel界面。 (但是,NIO 确实支持套接字的非阻塞模式)
有NIO.2(JSR-203)规范旨在克服 java.io 和 NIO 的许多当前限制,并为文件上的异步 IO 提供支持。据我了解,NIO.2 将与 Java 7 一起发布。
这些是 Java 库的限制,因此您在 Scala 中也会受到这些限制。
Actors
Actors 基于 Doug Lea 的 Fork-Join 框架(至少在分支 2.7.x 之前)版本2.7.7)。引用一则来自FJ任务类:
没有什么可以真正阻止
防止您在 FJTask 中阻塞,并且
非常短的等待/阻塞完全
表现良好。但FJTasks不是
旨在支持任意
同步,因为没有办法
暂停和恢复个别任务
一旦他们开始执行。
FJTasks 也应该是有限的
持续时间——它们不应包含
无限循环。 FJ可能的任务
需要执行阻止操作,或者
长时间持有锁,或者
永远循环可以代替创建正常
java Thread 对象将执行此操作。
FJTasks 的设计初衷并不是为了
支持这些事情。
FJ 库在 Scala 中得到了增强,提供了一种统一的方式,允许参与者根据工作线程的数量和“库活动”像线程或基于事件的任务一样运行(您可以在技术报告中找到解释“统一线程和事件的参与者”作者:菲利普·哈勒和马丁·奥德斯基)。
解决方案?
但毕竟如果你在一个 Actor 中运行阻塞代码,它的行为就像它是一个线程一样,所以为什么不使用普通的Thread
用于阻止读取并将事件从该线程发送到基于事件的参与者?
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)