• 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队列里。

  • 相关阅读:
    nginx负载均衡
    mysqld: Out of memory Centos 创建swap分区解决
    redis 基本命令
    查看日志常用命令
    StringIO和BytesIO
    paramiko初识
    微信小程序-drf登录认证组件
    微信小程序之模块化--module.exports
    celery 定时任务报错一
    微信小程序跨页面传值
  • 原文地址:https://www.cnblogs.com/bobfly1984/p/14083147.html
Copyright © 2020-2023  润新知