免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
123
最近访问板块 发新帖
楼主: gqbfree
打印 上一主题 下一主题

[技术动态] 关于AIO的一个疑问 [复制链接]

论坛徽章:
0
21 [报告]
发表于 2014-11-07 12:08 |只看该作者
回复 21# cobras
我明白AIO的思想,这个思想没有问题。  设置一个回调,然后不阻塞的继续处理手上的事情。
但是在我帖子里面的这个具体问题上,我是想搞清楚 EPOLL+AIO 是否比 EPOLL+NIO 性能上更具优势? 优势又是在哪里呢?
因为从网上搜索的结果看,AIO给人感觉是更先进的一种技术。 例如刚刚贴的IBM那位的帖子:
http://www.ibm.com/developerworks/cn/linux/l-async/


   

论坛徽章:
0
22 [报告]
发表于 2014-11-07 12:11 |只看该作者
回复 18# yulihua49
不知道为什么,回复的帖子会消失。看看记录,说是 已忽略。  怎么恢复呢?


   

论坛徽章:
2
2015年辞旧岁徽章
日期:2015-03-03 16:54:152015年迎新春徽章
日期:2015-03-04 09:56:11
23 [报告]
发表于 2014-11-07 17:18 |只看该作者
实际上中断是配合DMA来完成AIO工作的。先对中断控制器和DMA控制器布置任务。待DMA将数据复制完成后,调用中断程序进行处理。此时数据已经在指定的内存中了。
如果系统在给DMA指定内存时直接将用户的数据区指定给DMA。则可以不用进行数据复制。此时的AIO效率最高。但实际系统是DMA对数据区有诸多的限制。造成不可能这样完成任务。一般都是直接指定内核的缓冲区,然后再复制到用户数据区。这就造成了一次IO和一次数据复制。
EPOLL的实现应该是这样的。就是IO中断后,不直接复制数据到用户数据区。而是设置状态。通过用户态代码来主动复制内核缓冲区数据。
所以这样看来。AIO与EPOLL的区别仅是复制数据的先后问题。实际实现可能有所区别。因为EPOLL可以同时处理大量的文件描述符。而这也就造成了对于文件描述符数据发生的频率的不同,EPOLL的效率将有很大的差异。

论坛徽章:
0
24 [报告]
发表于 2014-11-10 16:43 |只看该作者
回复 26# cobras
虽然我心里还是有那个疑问   还是多谢底层的分析。  

   

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
25 [报告]
发表于 2015-03-24 16:25 |只看该作者
本帖最后由 yulihua49 于 2015-03-24 16:35 编辑
gqbfree 发表于 2014-10-24 12:18
纯理论讨论,AIO的效率高在哪个部分,以下理解不正确的地方请指出:
IO处理分为2个部分,IO请求+IO处理(I ...

SOCKET 就 NIO + epoll
文件,就 AIO + eventfd + epoll。
因为NIO对文件无效。而SOCKET使用AIO还需要另外的eventfd,还要页边界对齐的buffer,太麻烦了。

http://bbs.chinaunix.net/thread-4077904-3-1.html
25楼的传送文件的服务器程序,第三行就是AIO,13行就是NIO。在这两处都可能yield。
这都不是为了什么效率问题,而是在少线程服务器的条件下,让那些等待IO的任务能够腾出线程来为别的任务服务。
改善服务器的用户体验。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
26 [报告]
发表于 2020-09-13 14:50 |只看该作者
gqbfree 发表于 2014-10-29 10:10
@yulihua49   @zylthinking   @linux_c_py_php   炸出来

6年后炸出来了。

论坛徽章:
15
射手座
日期:2014-11-29 19:22:4915-16赛季CBA联赛之青岛
日期:2017-11-17 13:20:09黑曼巴
日期:2017-07-13 19:13:4715-16赛季CBA联赛之四川
日期:2017-02-07 21:08:572015年亚冠纪念徽章
日期:2015-11-06 12:31:58每日论坛发贴之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-08-04 06:20:00程序设计版块每日发帖之星
日期:2015-07-12 22:20:002015亚冠之浦和红钻
日期:2015-07-08 10:10:132015亚冠之大阪钢巴
日期:2015-06-29 11:21:122015亚冠之广州恒大
日期:2015-05-22 21:55:412015年亚洲杯之伊朗
日期:2015-04-10 16:28:25
27 [报告]
发表于 2020-09-13 14:51 |只看该作者
本帖最后由 yulihua49 于 2020-09-14 09:36 编辑
gqbfree 发表于 2014-10-25 23:07
用别的CPU去完成拷贝,不也是消耗了总性能么?  假设所有的CPU都在高速的运行中。我觉得单从理论上讲,AIO ...

现在我知道了。
在网络比较阻塞的条件下,传送大包数据,NIO会不断地挂起,不断的回调,期间开销非常大。AIO可以一次性挂起,完成后回调。效率高很多。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP