Linux高级I/O机制

摘要:
Linux高级I/O机制Linux高级I/O机理2011-08-2014:11 I.课程目标I/O通常是现代应用程序的性能瓶颈。为了突破这个瓶颈,现代操作系统不断引入新的I/O机制,使高性能I/O编程成为可能。本课程将讨论Linux下的几种高性能I/O机制。这些函数基于成熟的系统调用。通过本课程,学生将掌握以下内容:传统的文件I/O;分散/聚集I/O;阻塞和非阻塞I/O;I/O复用;选择(),轮询()事件投票异步I/O;I/O复用机制和异步I/O机制用于提高网络应用的并发响应和性能。

Linux高级I/O机制

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机制和网络服务端应用

六、课程资源

可获取的课程资源见:教学资源

免责声明:文章转载自《Linux高级I/O机制》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇css实现超出文本省略号的两个方法Ubuntu 16.04LTS修改开机启动项下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Redis事件

前言 Redis 是一个事件驱动的内存数据库,服务器需要处理两种类型的事件。  文件事件  时间事件 下面就会介绍这两种事件的实现原理。 文件事件 Redis 服务器通过 socket 实现与客户端(或其他redis服务器)的交互,文件事件就是服务器对 socket 操作的抽象。 Redis 服务器,通过监听这些 socket 产生的文件事件并处理这...

1. Redis是属于多线程还是单线程?不同版本之间有什么区别?

Redis是普及率最高的技术之一,不仅是面试会被经常问到,在工作中也是非常常用的。下面我们就深入的了解一下Redis,顺便会介绍一些常见的面试题。 问题:Redis是属于单线程还是多线程? 不同版本的Redis是不同的,在Redis4.0之前,Redis是单线程运行的,但是单线程并不代表效率就低,像Nginx、Nodejs也是单线程程序,但是它们的效率并不...

《内核源码情景分析》(浙大)笔记

内核源码情景分析笔记 背景 1.1 x86寻址 1.2 C in Linux 1.3 Assembly in Linux 为什么要汇编 GNU 386汇编 存储管理 2.1 内存管理基本框架 2.2 地址映射全过程 2.3 常见数据结构 2.4 越界访问 2.5 用户堆栈的扩展 2.6 物理页的使用和周转 2.7 物理页面分配 2.8 页面...

epoll惊群原因分析

考虑如下情况(实际一般不会做,这里只是举个例子): 在主线程中创建一个socket、绑定到本地端口并监听 在主线程中创建一个epoll实例(epoll_create(2)) 将监听socket添加到epoll中(epoll_ctl(2)) 创建多个子线程,每个子线程都共享步骤2里创建的同一个epoll文件描述符,然后调用epoll_wait(2)等待事...

0508操作系统

课后题:https://wenku.baidu.com/view/40a1cb3a3968011ca300919c.html 1.操作系统的定义 操作系统是运行在计算机硬件上的第一层软件,它是用户和计算机硬件系统之间的接口,用户通过os来使用计算系统,是计算机系统资源的管理者,实现了对计算机资源的抽象。计算机资源的抽象:OS在裸机上覆盖了I/O设备管理软件...

[Python之路] 使用epoll实现高并发HTTP服务器

什么是epoll 我们在  Python多种方式实现并发的Web Server 的最后使用单进程+单线程+非阻塞+长连接实现了一个可并发处理客户端连接的服务器。他的原理可以用以下的图来描述: 解释: 1.HTTP服务器是我们使用 单进程+单线程+非阻塞+长连接实现 的web服务器。 2.在实现的时候,我们创建了一个存放已接受Socket连接的列表,该列表...