我有相当大的文件需要处理(500Meg+压缩文件)。
有没有针对Scala参与者的非阻塞IO开源实现?
发布于 2009-10-06 07:40:51
如果我没弄错你的问题,你需要文件的非阻塞IO。我有个坏消息要告诉你。
NIO
Java6中的Java NIO在处理文件时只支持阻塞操作。您可以从FileChannel不实现SelectableChannel接口的事实中注意到这一点。(不过,NIO确实支持套接字的非阻塞模式)
NIO.2 (JSR-203)规范旨在克服java.io和NIO的许多当前限制,并为文件上的异步IO提供支持。据我所知,NIO.2将与Java7一起发布。
这些都是Java库的限制,因此在Scala中也会受到限制。
演员
Actor基于Doug Lea的Fork-Join框架(至少在分支2.7.x到version 2.7.7)。引用FJTask class的一句话
实际上没有什么能阻止你在FJTask中阻塞,而且非常短的等待/阻塞是完全正常的。但是FJTasks并不是为了支持任意同步而设计的,因为一旦任务开始执行,就没有办法暂停和恢复它们。FJTasks的持续时间也应该是有限的--它们不应该包含无限循环。可能需要执行阻塞操作、长时间持有锁或永远循环的FJTasks可以创建将执行此操作的普通java Thread对象。FJTasks的设计就是不支持这些东西。
FJ库在Scala中得到了增强,提供了一种统一的方式,允许参与者根据工作线程的数量和“库活动”(你可以在Philipp Haller和Martin Odersky的技术报告"Actors that unify Threads and Events“中找到解释)像线程或基于事件的任务一样工作。
解决方案?
但毕竟,如果你在参与者中运行阻塞代码,它的行为就像是一个线程,那么为什么不使用一个普通的Thread来阻塞读取并从这个线程向基于事件的参与者发送事件呢?
发布于 2009-10-03 17:22:27
你是在说远程演员吗?标准的Actor当然是一个内部的JVM虚拟机实体。恐怕我不知道远程参与者的NIO实现。
发布于 2009-10-05 19:14:21
你好,这是你的选择吗?bigdata(R)是一种横向扩展存储和计算结构,支持可选事务、非常高的并发性和非常高的聚合IO速率。
http://sourceforge.net/projects/bigdata/
https://stackoverflow.com/questions/1512066
复制相似问题