• Linux IO多路复用


    监听文件描述符的状态来进行相应的读写操作,3个函数:

    1
    2
    3
    select
    poll
    epoll
    1
    2
    3
    4
    5
    6
    7
    8
    9
    int (int nfds, fd_set *readfds, fd_set *writefds,
    fd_set *exceptfds, struct timeval *timeout);

    int poll(struct pollfd *fds, nfds_t nfds, int timeout);

    int epoll_create(int size);
    大专栏  Linux IO多路复用rd">int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
    int epoll_wait(int epfd, struct epoll_event *events,
    int maxevents, int timeout);

    select将监听的读、写、except三类文件描述符分开传入,且nfds最大支持1024个。

    poll类似于select,只不过将这3类文件描述符放到一个数组中了,同时fds没有最大限制。

    select poll需要逐个轮询每个fd的状态,且每个fd的用户空间数据需要独立copy(内核代码: do_sys_poll -> copy_from_user)。

    epoll是以上2个函数的增强版,nfds没有最大限制,理论上跟系统支持的最大文件描述符个数相等,所有fd的用户空间数据一次拷贝完成,且不用轮询每个fd的状态,而是通过注册回调的方式,效率明显提高。

    各种I/O阻塞时间比较:

    参考:
    Linux I/O详解

  • 相关阅读:
    Storm
    Linux 网络配置
    .NET Remoting
    jwt
    new操作符
    元数据
    C# lock
    三十而立
    面试
    灯火
  • 原文地址:https://www.cnblogs.com/lijianming180/p/12099693.html
Copyright © 2020-2023  润新知