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

时间:2009-10-02 22:18:38

标签: scala frameworks parallel-processing nio

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

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

4 个答案:

答案 0 :(得分:6)

如果我的问题正确,则需要非阻塞IO文件。那时我有个坏消息。

NIO

Java6中的Java NIO仅支持在处理文件时的阻止操作。您可能会注意到事实FileChannel没有实现SelectableChannel接口。 (NIO确实支持套接字的非阻塞模式)

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

这些是Java库限制,因此您在Scala中也会遇到它们。

演员

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

  

实际上没有任何阻止   你在FJTask中阻止,和   很短的等待/块是完全的   表现得很好。但FJTasks不是   旨在支持任意   同步,因为没有办法   暂停和恢复个别任务   一旦他们开始执行。   FJTasks也应该是有限的   持续时间 - 它们不应包含   无限循环。 FJTasks可能   需要执行阻止操作,或   长时间持有锁,或   永远循环可以改为创建正常   java将执行此操作的线程对象。   FJTasks只是不适合   支持这些事情。

在Scala中增强了FJ库,以提供一种统一的方式,允许actor像线程一样运行,或者像基于事件的任务一样,具体取决于工作线程的数量和“库活动”(您可以在技术报告中找到解释“{ {3}}“来自Philipp Haller和Martin Odersky。”

解?

但毕竟如果你在一个actor中运行阻塞代码,它的行为就像它是一个线程一样,那么为什么不使用普通的Thread阻塞读取并从这个线程向基于事件的actor发送事件?

答案 1 :(得分:1)

你在谈论远程演员吗?标准Actor当然是JVM内部实体。我不知道我害怕NIO实现远程演员。

答案 2 :(得分:1)

你好,这是一个选择吗? bigdata(R)是一个横向扩展存储和计算结构,支持可选事务,非常高的并发性和非常高的聚合IO速率。

http://sourceforge.net/projects/bigdata/

答案 3 :(得分:1)

不是我所知道的,但你可能会看到Naggati,一个围绕Apache Mina的Scala包装器,可能会获得很多好处。 Mina是一个使用NIO的网络库,Naggati将其转换为Scala编码风格。