代码之家  ›  专栏  ›  技术社区  ›  Roman Kagan mianos

是否有针对scala参与者的非阻塞IO开源实现?

  •  8
  • Roman Kagan mianos  · 技术社区  · 16 年前

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

    是否有针对scala参与者的非阻塞IO开源实现?

    4 回复  |  直到 16 年前
        1
  •  6
  •   Alexander Azarov    16 年前

    如果我正确回答了你的问题,你需要文件的非阻塞IO。那我有个坏消息要告诉你。

    氧化镍

    Java6在Java6中只支持在处理文件时的阻塞操作。你可以从事实上注意到这一点 FileChannel 不实现 SelectableChannel 接口。(但是,NIO支持套接字的非阻塞模式)

    有2号房间( JSR-203 )该规范旨在克服java.io和nio的许多当前限制,并为文件上的异步IO提供支持。据我所知,NiO 2将用Java 7发布。

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

    演员

    参与者基于DougLea的fork-join框架(至少在branch 2.7.x.til中) version 2.7.7 )一句话 FJTask class :

    实际上没有什么能阻止 你在一个FJTask中阻止,并且 非常短的等待/阻塞完全 行为端正。但FJTasks不是 旨在支持任意 同步,因为没有办法 暂停和恢复单个任务 一旦他们开始执行。 FJTask也应该在 持续时间--它们不应包含 无限循环。FJTask可能 需要执行阻塞操作,或 长时间保持锁,或 循环永远可以创建正常 这样做的Java线程对象。 FJTask并不是为 支持这些事情。

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

    解决方案?

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

        2
  •  1
  •   oxbow_lakes    16 年前

    你在说什么? 远程的 演员?标准 Actor 当然是一个内部的JVM实体。恐怕我不知道远程参与者的NIO实现。

        3
  •  1
  •   streetparade    16 年前

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

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

        4
  •  1
  •   Kevin Peterson    16 年前

    我不知道,但你可能看不到很多里程数 Naggati 一个关于ApacheMina的scala包装。mina是一个使用NIO的网络库,naggati将其转换为scala风格的编码。

    推荐文章