zoukankan      html  css  js  c++  java
  • IO多路复用

    概要

    使用非阻塞IO 的应用程序通常使用IO多路复用函数 查询设备是否可以立即访问。IO多路复用 对应的驱动需要实现文件操作的POLL()函数。
    IO多路函数调用的时候,每个驱动的poll()接口会调用到,执行IO多路函数的进程被挂到每个驱动的等待队列上,可以被任何一个驱动唤醒。

    poll函数实现模板

    poll(struct file *file, poll_table *wait)
    {
     poll_wait(file,自己定义的等待队列Q,wait); // 向poll_table添加等待队列
    
     if(数据可读)
      return POLLIN|POLLRDNORM;
    
     if(数据可写)
      return POLLOUT|POLLWRNORM;
    
     return 0; // 返回0,调用进程被设置为休眠状态,同时挂到自定义的等待队列Q上,当有数据读写时,
           // 调用wake_up_interruptible(Q)唤醒调用进程,调用进程重新调用poll()方法,返回POLLIN或POLLOUT。
    }
    

    用户空间编程接口

    select()
    poll()
    epoll()  // 不会随fd数目增长而降低性能,select和poll则会.

    epll机制的用户空间编程接口:
    epoll_create()
    epoll_ctl()
    epoll_wait()

    epoll监听事件:
    EPOLLET: 设置fd为edge triggered模式。默认是level triggered模式。LT就是内核通知应用fd就绪后,如果应用不执行IO操作,内核会多次发送通知。 而ET模式就是内核通知应用fd就绪后,假设应用已经处理不会再发送通知。
    EPOLLONESHOT: 指一次性监听。即监听完fd事件后,如果需要继续监听那么需要再次把fd加入到epoll队列里。

  • 相关阅读:
    Node.js核心模块-net
    ie8兼容rgba写法
    Node.js核心模块-http
    Node.js核心模块-fs文件系统
    js监听滚动结束
    mac本地安装全局包报错npm WARN checkPermissions
    安全测试回顾(一)
    python学习笔记(二):python数据类型
    python学习笔记(一):python简介和入门
    Centos下安装Redis
  • 原文地址:https://www.cnblogs.com/bobfly1984/p/14083147.html
Copyright © 2011-2022 走看看