Keyboard shortcuts

Press or to navigate between chapters

Press S or / to search in the book

Press ? to show this help

Press Esc to hide this help

练习题与扩展阅读

练习题

基础题

  1. IO控制方式有哪几种?各有什么优缺点?分别适合什么场景?
  2. 衡量IO性能的三个核心指标(带宽、延迟、IOPS)分别是什么含义?分别适合衡量什么样的场景?
  3. HDD和SSD的工作原理有什么不同?各有什么优缺点?
  4. 常见的IO模型有哪几种?各有什么优缺点?分别适合什么场景?
  5. 什么是Page Cache?它对IO性能有什么影响?

实操题

  1. 用iostat(Linux)或者资源监视器(Windows)查看你电脑的磁盘IO情况,分别观察连续读写和随机读写的IOPS和带宽。
  2. 编写一个简单的文件复制程序,分别用阻塞IO和异步IO实现,对比两者的性能差异。
  3. 测试你的U盘、SSD、HDD的读写速度,对比不同存储设备的性能差异。
  4. 编写一个简单的TCP服务器,分别用BIO和IO多路复用模型实现,对比两者能支持的最大并发连接数。

思考题

  1. 为什么IO系统会成为计算机系统的性能瓶颈?未来有什么技术可能解决这个问题?
  2. 什么是局部性原理?它和存储层次结构有什么关系?
  3. 高并发网络服务器为什么都采用IO多路复用模型?它相比多线程阻塞IO模型有什么优势?
  4. 随着SSD的价格越来越低,未来HDD会被完全取代吗?为什么?

扩展阅读

书籍推荐

  1. 《UNIX环境高级编程》(第3版)

    • 第14章高级IO、第16章网络IPC:套接字等章节详细讲解了UNIX系统下的IO操作
    • 系统编程的经典著作,适合想深入学习系统IO的开发者
  2. 《高性能MySQL》

    • 第7章MySQL高级特性、第8章优化服务器设置等章节讲解了存储和IO优化的内容
    • 对于理解数据库的IO优化非常有帮助
  3. 《深入理解计算机系统》

    • 第6章存储器层次结构、第10章系统级I/O等章节讲解了存储和IO的原理
    • 帮助你从底层理解IO系统的工作原理

在线资源

  1. Linux IO 模型详解

    • 知乎上的优质文章,详细讲解了Linux下的五种IO模型,图文并茂,通俗易懂
  2. C10K 问题

    • 经典的C10K问题原文,讲解了如何让服务器支持1万个并发连接
    • 是高性能服务器开发的必读文章
  3. MDN Web Docs - 性能

    • MDN的Web性能优化指南,包含网络IO优化、资源加载优化等内容
    • 适合前端开发者学习
  4. AWS 存储最佳实践

    • AWS官方的存储最佳实践白皮书
    • 讲解了不同场景下的存储选型和优化方法,适合后端和运维人员阅读

工具推荐

  1. iostat / vmstat / dstat:Linux下的系统性能监控工具,可以查看CPU、内存、磁盘IO、网络等性能指标
  2. perf:Linux下的性能分析工具,可以分析程序的性能瓶颈,包括IO相关的瓶颈
  3. CrystalDiskMark:Windows下的磁盘性能测试工具,可以测试连续读写、4K随机读写等性能
  4. Wireshark:网络抓包工具,可以分析网络IO的详细情况,排查网络问题
  5. FIO:开源的IO性能测试工具,支持各种IO场景的测试,非常强大

参考答案

练习题的参考答案可以在附录/练习题参考答案.md中找到。建议先独立思考完成,再查看答案。