请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

aiofile是异步磁盘IO么?

老师您好,今天突然想到了一个问题,就是关于aiofile这个库异步读写文件的原理,究竟是不是异步磁盘IO?
https://www.zhihu.com/question/52989189
在上面这个链接中,我看到都说,异步IO对磁盘IO是没有效果的。
https://www.v2ex.com/amp/t/343355
在第二个链接中,我看有人说aiofile底层还是用的同步IO,只是用多线程的方式将阻塞操作放在了子线程中进行,目的是不阻塞主线程,是这样么?
如果不是这样,那异步磁盘IO时,read这种方法,该如何被epoll监听到是可读事件?我理解在read时才会指明需要从文件句柄连接的文件里读多少个字节,再调用前内核也不知道我要读多少,就无从提起实现监听可读了
如果是这样,linux下是否无法异步读写文件?那像nginx或一些文件存储类的服务,该如何应对高并发下的磁盘io,只用线程应该是很影响性能的吧

正在回答 回答被采纳积分+3

1回答

bobby 2020-04-17 19:23:38

http://jialeicui.github.io/blog/epoll_does_not_work_with_file.html 能否支持文件读写 其实就是看epoll是否支持文件io, python的aiofiles本身底层使用的是线程池的方式,不是异步io,不过github上有开源的基于异步io的文件读写库,但是因为star数量并不高所以课程中也就没有使用这个库,

最后一点:文件读写的速度相对cpu来说却是慢,但是如果做得好速度相比网络io是很快的,不太会成为性能瓶颈,因为很多大型项目的日志读写也都是采用的同步文件io的方式写日志的, 而且像kafka这种高性能的消息队列也是基于文件完成的、

0 回复 有任何疑惑可以回复我~
  • 提问者 烈焰卡卡 #1
    可是我查到的epoll是无法支持文件io的?
    回复 有任何疑惑可以回复我~ 2020-04-17 19:28:44
  • 提问者 烈焰卡卡 #2
    这些基于文件完成的高性能项目,同步IO方式来写,也是因为他们都是基于大量线程来实现的吧。线程少还同步IO,那岂不是无法支撑住并发量
    回复 有任何疑惑可以回复我~ 2020-04-17 19:31:05
  • bobby 回复 提问者 烈焰卡卡 #3
    其实和前面说过的一样, 文件io是能顶住并发的,很多大公司也要写大量的日志, 也能够顶住并发的
    回复 有任何疑惑可以回复我~ 2020-04-18 19:17:52
问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信