Linux高级I/O机制
Saturday, 20 August 2011 14:11
There are no translations available.
一、课程目标
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机制和网络服务端应用
六、课程资源
可获取的课程资源见:教学资源。