当前位置: 首页 > 面试题库 >

Java中的异步IO?

於彬
2023-03-14
问题内容

除了java.nio之外,java中还有什么用于异步io(基于套接字)的选项?java.nio还会在后台使用线程吗(就像我认为.NET的async-socket-library所做的那样,也许它已被更改),还是使用适当的select调用是“ true”的异步io?


问题答案:

Java的NIO软件包(从Java6开始)通过Selector提供对非阻塞I / O的仅支持。希望Java7随NIO.2一起提供,它包括异步I / O支持。今天,最好的选择是利用框架。ARMistice提到了Mina。这是其他一些。

  1. Grizzly.。这是Sun的GlassFish服务器的I / O核心。Grizzly提供了一种进行异步读取/写入(通过队列模型)的工具。它都支持TCP和UDP。我曾在几个项目中使用过Grizzly。我对框架有一些喜好不喜欢的地方,但是要详细说明这确实是另一个主题。我要说的是,启动和运行某件东西很容易,而Grizzly为你做了很多繁重的工作。
  2. Netty.。该项目来自Mina项目的一位原始作者。我没有使用过这个,所以我不知道它对异步I / O的支持。你应该看看。
    现在,关于你的线程问题,NIO选择器不将线程用于非阻塞I / O。在JDK6中,他们使用Windows下的select()和较新的Linux内核上的epoll工具。对于异步I / O,线程详细信息取决于框架。


 类似资料:
  • 我正在尝试创建一个回调函数: 首先,我创建了一个函数接口,用于定义回调函数的约定 我创建了一个类,该类将定义一个方法来调用我的回调(我通过使用lambda表达式传递了接口的实现作为对此方法的引用) 下面是我的代码: 但当我运行这段代码时,我得到了这样的结果。 有人能告诉我为什么我会有这个例外吗?

  • 我希望我的请求触发一些长时间运行的操作,这些操作应该在后台执行。我编写了以下实现,应该在后台处理我的操作,但实际上我的请求是同步执行的: 在日志中,我看到以下内容: 我看到我的在另一个线程中执行,但出于某种原因,我的原始请求等待sleep完成 更新1:

  • 我正在使用来处理通过文件的大量记录。每一行都是一条记录,我将每一行传递给单独的线程进行处理,问题是我必须收集这些处理过的记录以及在处理记录时生成的更多数据,然后在最后的数据收集上应用一些业务逻辑。我将一个通用的传递给所有线程来填充已处理的数据,当我通过visualVM调试它时,我发现(屏幕截图如下)这些线程在等待中花费的时间比在运行中花费的时间多。我想这是因为一个线程在写入时获得了锁。 有没有一种

  • 问题内容: 到现在为止,因为它适用于服务的HTTP请求,我想条款- 和意味着同样的事情。但是显然,它们分别在Servlet 3.0和3.1中分别实现。我正在努力了解这里的区别… 请问有人可以进一步阐明这个话题吗?具体来说,我正在寻找一个示例,该示例说明服务器的Servlet 3.0实现如何异步而又在线程上阻塞?我想可能是,如果我理解了这一点,可能更容易理解Servlet 3.1中的非阻塞I / O

  • 问题内容: 有没有一种干净的方法可以以Java异步,非阻塞的方式(例如,状态机,而不是1个查询= 1个线程)来解析DNS查询(通过主机名获取IP)-我想同时运行数万个查询,但是不能运行数万个线程)? 到目前为止,我发现了什么: 标准实现正在阻塞,并且看起来标准Java库缺少任何非阻塞实现。 批量解决DNS问题也讨论了类似的问题,但是找到的唯一解决方案是多线程方法(即,一个线程在每个给定的时间段内仅

  • 我需要一种在Java中实现异步作业调度的机制,并正在研究Quartz调度器,但它似乎没有提供必要的功能。 null