Bas*_*ass 6 java io nio aio overlapped-io
System.IO.File在.NET和.NET Core 中有一系列Read...Async()方法,所有这些方法都返回Task<byte[]>或Task<string>(Task<T>是.NET与Java 的 等价物Future<T>)。
这看起来在很大程度上等同于AsynchronousFileChannelAPI(它们要么消耗CompletionHandler或返回 a Future),但有一个主要区别。
AsynchronousFileChannel 使用托管后台线程执行异步 I/O(该线程可能由默认线程池提供(sun.nio.ch.ThreadPool ) 或ExecutorService在通道创建期间显式指定的)。FileStream另一方面,.NET 中的实现将FileOptions.Asynchronous标志传递给底层操作系统(另请参阅同步和异步 I/O),不产生任何托管后台线程并使用所谓的重叠 I/O。sun.nio.ch.WindowsAsynchronousFileChannelImpl,这正是重叠 I/O之上的抽象层。java.nio.channels.SelectableChannel文件 I/O 的实现?如果否,技术限制是什么?这实际上是不可能的。整个 IO API 必须重新实现。NIO 表示非阻塞 I/O,它与异步 I/O 不同。非阻塞是在 JAVA 中实现的,长话短说,这意味着操作系统无法通知运行时操作已完成。isned java使用select()或poll()系统调用来检查数据是否可用。
我可以谈论它,但偷拍的图片值 100 字:
这就是为什么在JAVA中需要单独的线程不断调用check,check,check,check .....
我不知道 .NET 平台,但如果您发布的内容是正确的,那么它会利用异步 I/O,所以最后一列。但我不相信来自微软的任何东西。
希望它能回答您的问题。另外,我在这里还有一份额外的阅读材料: /sf/answers/183789581/
| 归档时间: |
|
| 查看次数: |
807 次 |
| 最近记录: |