网络学习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有东西时才不会阻塞

相关推荐

  1. 网络学习DAY3--TCP并发

    2024-03-15 04:00:02       22 阅读
  2. 嵌入式学习——网络编程(TCP)——day31

    2024-03-15 04:00:02       8 阅读
  3. Day 9. TCP并发模型、select、poll、epoll

    2024-03-15 04:00:02       22 阅读

最近更新

  1. TCP协议是安全的吗?

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

    2024-03-15 04:00:02       19 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-15 04:00:02       18 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-15 04:00:02       20 阅读

热门阅读

  1. LeetCode2864. Maximum Odd Binary Number

    2024-03-15 04:00:02       28 阅读
  2. 动态规划 Leetcode 494 目标和

    2024-03-15 04:00:02       22 阅读
  3. 缓存穿透和缓存击穿有什么区别?

    2024-03-15 04:00:02       23 阅读
  4. jsonl文件介绍

    2024-03-15 04:00:02       22 阅读
  5. 封装数据请求方法与接口方法

    2024-03-15 04:00:02       25 阅读
  6. C++基础5:自定义类型与字符串

    2024-03-15 04:00:02       18 阅读
  7. Avalonia之ListBox模版设置

    2024-03-15 04:00:02       20 阅读
  8. Crash Course Computer Science2

    2024-03-15 04:00:02       20 阅读
  9. 在哪些领域中最需要使用 OCR 识别技术?

    2024-03-15 04:00:02       20 阅读
  10. @ConfigurationProperties 的基本用法

    2024-03-15 04:00:02       18 阅读
  11. 题目 2656: 刷题统计

    2024-03-15 04:00:02       20 阅读