Linux高级I/O机制
2011-08-20 14:11一、课程目标
I/O常常是现代应用程序的性能瓶颈,为突破这个瓶颈,现代操作系统不断推出新的I/O机制,使高性能的I/O编程变成可能。本次课程将讨论Linux下几种高性能I/O的机制,这些功能都是基于成熟的系统调用,通过本次课程的学习,学员将掌握以下内容:
- 传统File I/O;
- 散/聚 I/O (Scatter/Gather I/O);
- 阻塞式和非阻塞式I/O;
- I/O多路复用;
- select() , poll();
- Event poll (epoll);
- 异步I/O;
- 运用I/O多路复用机制和异步I/O机制提高网络应用的并发响应和性能。
二、参训要求
参加本次课程的学员须具备以下能力:
- 本次课程使用 C语言 教学,所以学员需拥有较好的C语言基础;
- 能熟练使用常用的Linux命令;
- 由于本次课程涉及socket编程,所以学员需有Linux下socket编程的经历;
- 能熟练使用gcc、gdb、熟练撰写makefile;
- 最好熟练使用vi、emacs等文本编辑器其中的一种。
三、课程实践环境
- 学员自备电脑
- 操作系统:GNU/Linux 2.6+(建议使用Redhat AS 5+或Ubuntu、Fedora)
- 编译器:GCC v4.1+、GDB v7.0+
- 可选IDE:Eclipse CDT
四、课程大纲
本次课程由以下几个部分构成:
1、预备知识
- 理解:UNIX下一切皆文件
- I/O的实质和I/O的步骤
2、文件I/O
- Linux I/O系统调用与C标准库stdio的比较
- I/O系统调用: open(), close(), read(), write()
- 控制I/O的Buffer
- 读写指针的定位:lseek()
- I/O控制:ioctl()
- 原子操作和数据竞态
- 文件控制: fcntl()
- 文件打开的状态标志(status flags)
- 文件描述符
- 复制文件描述符 (dup(), dup2())
3、散/聚I/O (Scatter/Gather I/O)
- 什么是散/聚 I/O,为什么需要散/聚 I/O
- 系统调用:readv(), writev()
4、I/O多路复用 (I/O Multiplexing)
- 什么是I/O多路复用
- I/O多路复用和多线程并发处理I/O的区别
- select(), poll():传统的UNIX I/O多路复用机制
- select(), pselect()
- poll(), ppoll()
- Epoll:Linux系统新的I/O多路复用机制
- Event poll介绍
- 创建epoll实例
- 控制epoll
- 等待I/O事件
- epoll的两种触发方式:水平触发(level-triggered)、边缘触发(edge-triggered)
5、异步I/O
- 关于同步I/O:阻塞式I/O和非阻塞式I/O
- 什么异步I/O
- 理解同步I/O和异步I/O的差别
- 异步I/O重要数据结构:异步I/O控制块--struct aiocb
- 异步读、写操作:aio_read(), aio_write()
- 检查异步操作的结果:aio_error(), aio_return()
- 取消异步操作:aio_cancel()
- 异步文件同步:aio_fsync()
6、使用高性能I/O机制提高网络服务端应用的性能
- 为什么传统的I/O机制会导致服务端应用的性能瓶颈
- 使用select()和poll()实现ACE中的Reactor模式
- 使用epoll实现ACE中的Reactor模式
- 在网络应用中使用异步I/O机制:模拟ACE中Proactor模式和框架
- 实例演示,区别传统I/O机制和高性能I/O机制对于服务端应用的重要性
五、时间安排
课程时间:2天,以每天6小时计,具体安排如下:
- Day1
- 1 - 预备知识
- 2 - 文件I/O
- 3 - 散/聚 I/O
- 4 - I/O多路复用
- Day2
- 5 - 异步I/O
- 6 - 高性能I/O机制和网络服务端应用
六、课程资源
可获取的课程资源见: 教学资源 。