Java NIO 窗口实现

2023-12-28

在使用 NIO.2 AIO 功能进行项目时,我查看了“旧的”NIO 选择器实现,发现在 Windows 上使用了默认的选择函数,由于内部实现不良,该函数在 Windows 上根本无法扩展。大家都知道,在 Windows 上 IOCP 是唯一真正的解决方案。当然,完成时回调模型不适合 NIO 选择器模型,但这是否意味着在 Windows 上使用 NIO 基本上不是一个好主意?

例如:新的 AIO 功能包括 IOCP 实现。

在使用最新的 Netty 框架时尤其如此,其中对 AIO 的支持已被删除。那么 Netty 在 Windows 上的速度并没有想象的那么快?


NIO.2使用IOCP

下面的调用树通过在几个被调用的类名中包含“Iocp”来演示文件 I/O 的这一点,来自Java 7:测试台上的 NIO.2 文件通道 http://niklasschlimm.blogspot.de/2012/04/java-7-asynchronous-file-channels-part.html.

也可以看看sun.nio.ch.Iocp.java http://grepcode.com/file/repository.grepcode.com/java/root/jdk/openjdk/8-b132/sun/nio/ch/Iocp.java,“Windows 实现AsynchronousChannelGroup封装一个I/O完成端口”。

NIO 不使用 IOCP,因为它只支持“非阻塞 i/o”(选择器),而不支持仅在 NIO.2 中添加的“异步 i/o”(完成处理程序)。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java NIO 窗口实现 的相关文章

随机推荐

  • 如何使用Python进行互联网搜索?

    我想编写一个程序来搜索一个相当大的网站并提取某些内容 我上过一些在线 Python 课程 但都没有提到如何使用 Python 访问互联网 我不知道应该从哪里开始 你必须首先阅读标准Python库urllib2 http docs pytho
  • 与 docker swarm 的粘性会话

    我有一个使用 socket io 的 dockerized node js 应用程序 通过 docker compose 我在同一服务器上的两个不同容器上运行该应用程序的 2 个副本 然而 到达服务器的请求是以循环方式分发的 有没有一种方法
  • 将逗号分隔的列数据拆分为附加列

    我在一列中有逗号分隔的数据 Column a b c d 我想将逗号分隔的数据拆分为多列以获得以下输出 Column1 Column2 Column3 Column4 a b c d 如何才能实现这一目标 split part https
  • 查找数组中没有特定值的第一个值

    我怀疑这个问题很简单 但仍然是 我正在寻找一种有效的方法来从没有特定值的数组中获取第一个元素 例如 给定 Fred Fred Fred James Alex Fred 我想归还 詹姆斯 我可以通过类似的方式做到这一点 thearray se
  • Windows 中的 Confluence 平台

    是否可以在 Windows 上运行完整的 Confluence 平台 如果不是 运行 Confluence 平台的最佳方式是什么 Thanks Per 支持的操作系统列表 https docs confluent io current in
  • 如何在 REST 中创建 POST 请求以接受 JSON 输入?

    我正在尝试学习 RESTful Web 服务 我正在创建一组简单的网络服务 当我开始处理 POST 时遇到了困难 我想将 JSON 输入传递给 POST 方法 这就是我在代码中所做的 RequestMapping value create
  • 如何使用 VSCode 在虚拟环境中调试 python 代码?

    EDIT 使用 VSCode 我在虚拟环境中调试时遇到了问题 该环境具有未安装在base环境 使用命令激活环境后activate my env 我可以使用通常的 python 命令在环境中使用这些包python main py 但是在调试时
  • 2 个 cgi 脚本中的会话登录和注销

    我需要在用户登录时存储登录会话 并在用户退出系统或会话超时时删除登录会话 我正在用 Perl 编码 我知道我可以在 Perl 中使用 CGI Session 模块 但是如何确保会话是由 1 个 cgi 脚本创建并由另一个 cgi 脚本删除的
  • 如何通过 Qt WebGL 流向多个用户提供 Qt 应用程序?

    Qt Quick WebGL 流媒体 https www qt io blog 2018 11 23 qt quick webgl release 512是一种技术 任何 Qt Quick QML 应用程序都可以向通过 Web 浏览器连接的
  • 如何在 MongoDB 中启用数据压缩

    在 MongoDB 中 WiredTiger 提供了 Zlib 压缩选项 为了启用 Zlib 压缩选项 我使用以下代码创建了一个集合 db createCollection questions storageEngine wiredTige
  • 错误:WebhookClient.handleRequest 上没有请求意图的处理程序

    调用云函数的默认意图会出现错误 Error No handler for requested intent at WebhookClient handleRequest user code node modules dialogflow f
  • Powershell Get-ChildItem 进度问题

    所以 我在一个文件夹中有一组目录 00 99 每个目录都有 100 个子目录 00 99 每个子目录都有数千张图像 我想做的基本上是在计算平均文件大小时获得进度报告 但我无法让它发挥作用 这是我当前的查询 get childitem
  • 有没有办法更新工作项的“部署”部分?

    有谁知道更新工作项的 部署 部分的方法 我还没有找到任何可以执行此操作的任务的工作示例 cli 命令或 API 调用 这似乎是Azure DevOps Releases产品的独有功能 但我希望能够使用多阶段 YAML 管道来实现类似的东西
  • 在 Python 中定义带有可选参数的类

    class class1 def setdata self value1 value2 self data value1 value2 def display self print self data 对于上面的代码 当我使用它的时候 它需
  • C# - SqlDataReader 和序列化

    SqlDataReader 可以传递到会话或发送到客户端吗 例如 如果我从数据库中检索了一些行 并希望将此数据发送到另一台客户端计算机 我可以简单地通过在服务器上使用 json 序列化它然后在客户端上反序列化来完成此操作吗 不 只有数据 没
  • 在没有 epmd 的情况下启动 erlang VM

    我正在尝试与 erlang 虚拟机分开启动 epmd 以便对连接处理进行监控 这工作得很好 除了虚拟机在 epmd 之前启动的情况 有没有办法让 erlang 虚拟机启动而不自行启动 epmd 从 Erlang OTP 19 0 开始 有a
  • getPathValue() 函数用于具有数组和打包 JSON 的深层对象

    有关背景 请参考这个问题 访问嵌入式 JSON 的深层对象成员 https stackoverflow com q 53819904 3566998 那里提供的解决方案与键值中包含的打包 JSON 配合得很好 但是 它们不处理 JSON 具
  • 从静态方法获取应用程序实例

    在 Android 中使用静态方法获取应用程序继承者的实例是否正确 我在一些开源项目中看到过这种方法 VLC https github com mstorsjo vlc android blob master vlc android src
  • 如何在 Docker 镜像中安装 grails?

    我正在致力于将基于 grails 构建的现有应用程序容器化 我已经能够在一段时间内成功构建该项目debian stretch图像 是的 我知道那很旧 但该项目最初是用几乎所有内容的旧版本构建的 gradle maven and defaul
  • Java NIO 窗口实现

    在使用 NIO 2 AIO 功能进行项目时 我查看了 旧的 NIO 选择器实现 发现在 Windows 上使用了默认的选择函数 由于内部实现不良 该函数在 Windows 上根本无法扩展 大家都知道 在 Windows 上 IOCP 是唯一