首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >windows操作系统上的AsynchronousFileChannel是什么效率?

windows操作系统上的AsynchronousFileChannel是什么效率?
EN

Stack Overflow用户
提问于 2018-03-13 08:31:09
回答 1查看 159关注 0票数 0

这些天我正在学习JavaNIO2.API,我做了一个测试来比较AIO和标准IO之间的效率,测试是编写一个2000米的file.Here作为代码。

标准的方法:

代码语言:javascript
复制
FileOutputStream output = new FileOutputStream(tmp);
byte[] byteArr = new byte[1024 * 1024];
for (int i = 0; i < 1024 * 1024; i++) {
    byteArr[i] = 1;
}
long start = System.currentTimeMillis();
while (length -- > 0) {
    output.write(byteArr);
}
System.out.println("taking time:" + (System.currentTimeMillis() - start) + "ms");

结果是taking time:10392ms

AIO方式:

代码语言:javascript
复制
AsynchronousFileChannel afc   = AsynchronousFileChannel.open(path, WRITE, CREATE);
List<Future<Integer>> results = new ArrayList<>();
ByteBuffer buf = ByteBuffer.allocate(1024 * 1024);
buf.clear();
for (int j = 0; j < 1024 * 1024; j++) {
    buf.put((byte) 1);
}
buf.flip();
buf.mark();
long start = System.currentTimeMillis();
for (int i = 0; i < 2000; i ++) {
    buf.reset();
    results.add(afc.write(buf, i * 1024 *1024));
}
for(Future<Integer> future : results) {
    future.get();
}
System.out.println("taking time:" + (System.currentTimeMillis() - start) + "ms");

结果是taking time:15652ms

我认为,在第二种情况下,程序向操作系统提交了2000份书面请求。操作系统将使用自己的线程池运行IO操作。换句话说,thread pool size IO操作将同时执行。在第二种情况下,它应该更快。但事实正好相反,为什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-03-16 02:32:10

在程序提交写入请求之前,文件被锁定,直到写入operation.In (另一个词)结束,AsynchronousFileChannel只允许在同一个time.So多线程上执行一个操作无效。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/49251486

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档