Scala / Java 中的 NIO 问题是什么?

6
在搜索jvm并发性的过程中,我发现了一些关于在Scala/Java中搜索非阻塞IO库的问题。
这个问题是什么?如果我想要发送某些内容到文件/套接字,我可以启动一个单独的线程来完成这项工作。
我知道使用基于事件的线程可能会存在问题-因为整个系统可能会被阻塞。但这是否与JVM/Scala有关?
添加: 请纠正我如果我错了: 我认为当你需要以异步方式调用某些IO函数时,它需要进入单独的进程或系统(重)线程。我对吗? 所以-所有关于在常见语言中解决此类问题的问题都涉及创建和管理单独的进程或线程。因此,语言唯一的便利之处就是创建一些池线程,这些线程将被分配给异步IO操作。
因此,我的假设是。 句子:“X语言比Y语言更好,因为调用异步IO操作不会阻塞虚拟机”是错误的,因为在支持系统线程的每种语言中,都有可能管理NIO,唯一的区别是X语言通过内置库/语言功能更好地支持此功能。
1. 这个假设是真的吗? 2. 有没有一些语言可以在没有操作系统支持的情况下实现NIO?(通过进程/线程)

请澄清您的问题。提供一个例子会有所帮助,也许可以引用您在网上找到的参考资料。 - Aaron Novstrup
你有没有考虑过这样一种可能性,即你可能有很多连接,但没有一个被大量使用?你确定要为每个连接分配一个线程吗? - Rex Kerr
好的 - 我可以创建一些线程池。但是我认为除了系统进程/线程之外没有其他方法来创建它。请看我的补充。 - Robert Zaremba
@Aaron - 使我提出这个问题的其中一个原因是:是否有适用于Scala Actors的非阻塞IO开源实现 - Robert Zaremba
2个回答

2

Scala拥有大量的并发工具,而NIO则拥有一些非阻塞IO工具。因此,毫不奇怪地,有许多优秀的库帮助连接这些点:

  • Finagle

    …一个用于在Java、Scala或任何JVM语言中构建异步RPC服务器和客户端的库。在Netty的基础上,Finagle提供了丰富的工具,它们是协议无关的。

  • Akka是一个相当不错、功能丰富的actor/并发/服务包,也使用Netty作为其内置远程处理功能

  • Naggati2是Twitter推出的另一个基于Netty构建的库,不确定它是否已被Finagle替代。


2

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接