TCP并发模型 || select || poll || epoll

TCP并发模型:
1.TCP多线程模型:
    缺点:
        1.创建线程会带来资源开销,能够实现的并发量比较有限 

2.IO模型:
    1.阻塞IO:
        没有数据到来时,可以让任务挂起,节省CPU资源开销,提高系统效率
    
    2.非阻塞IO:
        程序未接收到数据时一直执行,效率很低

    3.异步IO
        只能绑定一个文件描述符用来读取数据

    4.多路复用IO
        select         //监听集合
            1.select监听的集合中的文件描述符有上限限制
            2.select有内核层向用户层数据空间拷贝的过程,占用系统资源开销
            3.select必须轮询检测产生事件的文件描述符
            4.select只能工作在水平触发模式(低速模式),无法工作在边沿触发(高速模式)

        poll         //监听数组
            1.poll有内核层向用户层数据空间拷贝的过程,占用系统资源开销
            2.poll必须轮询检测产生事件的文件描述符
            3.poll只能工作在水平触发模式(低速模式),无法工作在边沿触发(高速模式)

        epoll         //监听内核空间中的一个事件表

        epoll_create

        epoll_ctl

        epoll_wait

函数接口:


    1.select 
      int select(int nfds, fd_set *readfds, fd_set *writefds,
                  fd_set *exceptfds, struct timeval *timeout);
      功能:
        select监听文件描述符集合中是否有文件描述编程ready状态
      功能:
        nfds:最大文件描述符的值+1 
        readfds:读文件描述符集合
        writefds:写文件描述符集合
        exceptfds:其余文件描述符集合
        timeout:等待的时长
            NULL 一直等待
      返回值:
        成功返回文件描述符集合中的文件描述符个数
        失败返回-1 

    void FD_CLR(int fd, fd_set *set);
    功能:
        将文件描述符fd从集合中清除 

    int  FD_ISSET(int fd, fd_set *set);
    功能:
        判断文件描述符fd是否仍在集合中 

    void FD_SET(int fd, fd_set *set);
    功能:
        将文件描述符fd加入到集合中

    void FD_ZERO(fd_set *set);
    功能:
        将文件描述符集合清0 

    2.poll   
      int poll(struct pollfd *fds, nfds_t nfds, int timeout);
      功能:
        监听文件描述符集合是否有事件发生
      参数:
        fds:监听文件描述符集合数组空间首地址
        nfds:监听文件描述符集合元素个数
        timeout:等待的时间(-1 一直等待)
      返回值:
        成功返回产生事件的文件描述符个数
        失败返回-1 

    struct pollfd {
        int   fd;         /* file descriptor */
        short events;     /* requested events */
        short revents;    /* returned events */
    };

    fd:监听的文件描述符
    events:要监听的事件  POLLIN:是否可读  POLLOUT:是否可写
    revents:实际产生的事件 

    3.epoll 
      int epoll_create(int size);
      功能:
        创建一张内核事件表
      参数:
        size:事件的个数
      返回值:
        成功返回文件描述符
        失败返回-1 
    
      epoll_ctl 
      int epoll_ctl(int epfd, int op, int fd, struct epoll_event *event);
      功能:
        维护epoll时间表
      参数:
        epfd:事件表的文件描述符
        op:
            EPOLL_CTL_ADD   添加事件
            EPOLL_CTL_MOD   修改事件
            EPOLL_CTL_DEL   删除事件
        fd:
            操作的文件描述符
        event:
            事件对应的事件 
        
        typedef union epoll_data {
            void        *ptr;
            int          fd;
            uint32_t     u32;
            uint64_t     u64;
        } epoll_data_t;

        struct epoll_event {
            uint32_t     events;      /* Epoll events */
            epoll_data_t data;        /* User data variable */
        };

      返回值:
        成功返回0 
        失败返回-1 

      epoll_wait 
      int epoll_wait(int epfd, struct epoll_event *events,
                      int maxevents, int timeout);
      功能:
        监听事件表中的事件
      参数:
        epfd:文件描述符
        events:存放实际产生事件的数组空间首地址
        maxevents:最多存放事件的个数
        timeout:设定监听的时间(超过该时间则不再监听)
        -1 一直监听直到有事件发生
      返回值:
        成功返回产生事件的文件描述符个数
        失败返回-1 
        如果时间达到仍没有事件发生返回0 


 

相关推荐

  1. TCP并发模型

    2024-03-13 14:58:03       19 阅读
  2. TCP并发模型 || select || poll || epoll

    2024-03-13 14:58:03       18 阅读
  3. Day 9. TCP并发模型、select、poll、epoll

    2024-03-13 14:58:03       22 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-13 14:58:03       18 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-13 14:58:03       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-13 14:58:03       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-13 14:58:03       20 阅读

热门阅读

  1. 大数据开发(HBase面试真题-卷一)

    2024-03-13 14:58:03       22 阅读
  2. 机器学习实验------K-means聚类算法

    2024-03-13 14:58:03       23 阅读
  3. 嵌入式学习日记 25

    2024-03-13 14:58:03       21 阅读
  4. ES6中 字符串的方法

    2024-03-13 14:58:03       20 阅读
  5. 探索未来科技:量子计算的前沿与挑战

    2024-03-13 14:58:03       20 阅读
  6. 如何实现用django读写elasticsearch

    2024-03-13 14:58:03       21 阅读
  7. YOLO-World:实时开放词汇目标检测

    2024-03-13 14:58:03       22 阅读
  8. udp通信程序(桥接模式)

    2024-03-13 14:58:03       19 阅读
  9. 在 Android 上部署预训练模型

    2024-03-13 14:58:03       20 阅读