• 网络学习DAY3--TCP并发


    思路一:多线程并发

    缺点:资源浪费过大,且能实现的并发量有限。

    思路二:IO通信

    1.阻塞IO

    没有任务时,挂起任务,节省资源,提高效率

    2.非阻塞IO

    未收到数据时一直执行,效率很低

    3.异步IO

    只能绑定一个文件描述符来读取数据

    4.多路复用IO


        4.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    

    4..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:存放实

    今日错误:read有东西时才不会阻塞

  • 相关阅读:
    css盒子模型(框模型)属性
    【0907 C高级day2】Shell脚本
    Re11:读论文 EPM Legal Judgment Prediction via Event Extraction with Constraints
    PostgreSQL常用的领域和用例
    管理心得--如何成为优秀的架构师
    【附源码】Python计算机毕业设计商场VIP管理系统
    CentOS 升级 OpenSSL 至最新版教程
    React 入门:使用 create-react-app 创建 react 17 版本的应用
    C++ std::tr1::function和std::tr1::bind模板类介绍,qt测试
    求和——快速幂
  • 原文地址:https://blog.csdn.net/weixin_69286552/article/details/136617579