异步非阻塞I/O的运行时间

最近看书有点儿迷惑,还请各位大侠不吝赐教

当某个线程需要很耗时的I/O操作时,就会阻塞然后OS调度其它线程工作,从而提高CPU的利用率。

这个过程我的理解是,I/O操作是独立的DMA芯片在进行磁盘和内存间数据的传输,此时CPU会等着I/O操作的结果,这个过程很费时,如果CPU一直等待I/O的结果就浪费了时间。此时如果让OS调度CPU执行其它线程任务可以节约CPU指令周期,从而提高利用率。我觉得这么解释还是可以理解的。
但是比如说一个以I/O为主的静态文件Web Server,我们假设一次I/O操作的耗时固定为t,每次请求的CPU的逻辑运算时间相对I/O可以忽略,那么对于并发的1000个请求,按上面的理解,需要的总耗时为T = 1000*t,因为毕竟DMA需要一个请求一个请求(串行?)地去完成工作。
不知道这个结论正确吗?但是根据平时来看,处理高并发的静态资源服务器速度很快,似乎并不是在串行地进行I/O,这应该怎么解释呢?
谢谢

阅读 3.4k
2 个回答

瓶颈哪会在磁盘呀,你应该动手去申请个阿里云的服务器。学生配置也就9.9/月。
装个nginx,你会发现瓶颈完全在网卡。
敲个top看下到底是怎么回事。

难道服务器不会把文件加载到内存吗,非得每次都去磁盘读吗。

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进