gpt4 book ai didi

java - Java 中通过 POSIX AIO 或 Windows 重叠 IO 的异步文件 I/O

转载 作者:搜寻专家 更新时间:2023-11-01 03:31:10 25 4
gpt4 key购买 nike

.NET.NET Core 中的 System.IO.File 有一系列 Read...Async() 方法,所有这些方法都返回 Task<byte[]>Task<string>(Task<T>.NET 相当于 Java 的 Future<T>)。

这看起来在很大程度上等同于 AsynchronousFileChannel API(消耗 CompletionHandler 或返回 Future ),但有一个主要区别。

  • AsynchronousFileChannel 使用托管后台线程执行异步 I/O(该线程可以由默认线程池 (sun.nio.ch.ThreadPool) 提供,也可以由在 channel 创建期间明确指定的 ExecutorService 提供)。
  • .NET 中的 FileStream 实现另一方面,将 FileOptions.Asynchronous 标志传递给底层操作系统(另请参见 Synchronous and Asynchronous I/O ),不会产生任何托管后台线程并使用所谓的 Overlapped I/O .

问题:

  • Java 中是否有任何(现有的或计划中的)文件 I/O API 将在 WindowsPOSIX AIO 上使用重叠 I/O在联合国? 更新:Windows-specific Java runtime features sun.nio.ch.WindowsAsynchronousFileChannelImpl 这正是 Overlapped I/O 之上的抽象层.
  • 是否有任何计划为文件 I/O 提供 java.nio.channels.SelectableChannel 实现?如果没有,技术限制是什么?

最佳答案

这是不可能的。必须重新实现整个 IO API。 NIO 表示非阻塞 I/O,它与异步 I/O 不同。非阻塞是在 JAVA 中实现的,长话短说,这意味着操作系统无法通知运行时操作已完成。 Isned java 使用select()poll() 系统调用来检查数据是否可用。

我可以谈论它,但 stollen 图片值 100 个字:

enter image description here

这就是为什么在JAVA中需要单独的线程不断调用check,check,check,check .....

我不知道 .NET 平台,但如果您发布的内容是正确的,那么它使用异步 I/O,所以最后一栏。但我不相信来自 Microsoft 的任何东西。

希望它能回答您的问题。在这里我还有一个额外的阅读 Material : https://stackoverflow.com/a/2625565/8951886

关于java - Java 中通过 POSIX AIO 或 Windows 重叠 IO 的异步文件 I/O,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54213736/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com