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机制和网络服务端应用
 
 
六、课程资源
可获取的课程资源见:教学资源。