zoukankan      html  css  js  c++  java
  • Linux高级I/O机制

    Linux高级I/O机制

    Linux高级I/O机制

    一、课程目标

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

    六、课程资源

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

  • 相关阅读:
    《.Net之美》样章 1.1 理解泛型(转载)
    jQuery&JSON~~
    TreeView绑定XML
    TreeView 的 CheckBox 被点击时的引发页面回发事件
    开发中巧用Enum枚举类型
    今天开始学习Python
    获取天气预报
    ORACLE数据库备份
    Eclipse配置Tomcat
    ORACLE常见错误及解决办法
  • 原文地址:https://www.cnblogs.com/lexus/p/2565891.html
Copyright © 2011-2022 走看看