linux网络编程
文章平均质量分 64
nuaa蟑螂恶霸
想要学好C++的菜鸟
展开
-
网络通信中的五种IO模型
在介绍网络通信中的IO模型之前,先介绍一下阻塞和非阻塞,同步与异步的区别典型的一次IO的两个阶段:1:数据就绪2:数据读写阻塞和非阻塞:数据就绪阶段:调用IO 该线程是否阻塞阻塞:如果没有数据就绪 函数阻塞在原地非阻塞:立即返回比如使用read recv select poll 默认都是阻塞的 数据没准备好 阻塞在那里注意Epoll 使用et模式 要设置文件描述符 为非阻塞同步和异步的区别:在数据准备好之后,要把数据从内核文件描述符对应的缓冲区拷贝到用户程序同步:用户原创 2022-04-03 16:11:59 · 633 阅读 · 1 评论 -
io多路复用中的epoll函数详解
epoll介绍epoll提供了三个函数,epoll_create、epoll_ctl和epoll_wait。1 首先创建一个epoll对象,2 然后使用epoll_ctl对这个对象进行操作(添加、删除、修改),把需要监控的描述符加进去,这些描述符将会以epoll_event结构体的形式组成一颗红黑树3 接着阻塞在epoll_wait,进入大循环,当某个fd上有事件发生时,内核将会把其对应的结构体放入一个链表中,返回有事件发生的链表。epoll的三个函数介绍 int epoll_create原创 2022-04-02 21:03:40 · 1593 阅读 · 0 评论 -
io多路复用中的poll函数详解
poll函数poll的机制与select类似,与select在本质上没有多大差别,管理多个描述符也是进行轮询,根据描述符的状态进行处理,但是poll没有最大文件描述符数主旨思想:首先要构造一个关于pollfd数组,将文件描述符和要检测的时间加入数组中调用一个poll函数,监听pollfd数组中的文件描述符,直到这些描述符中的一个或者多个进行I/O操作时,该函数才返回。a.这个函数是阻塞b.函数对pollfd数组的文件描述符的检测的操作是由内核完成的在返回时,它会告诉进程有多少个描述符要进行I原创 2022-04-02 11:43:35 · 1267 阅读 · 0 评论 -
io多路复用中的select函数详解
selectLinux下如果要与多个客户端通信 需要使用多线程或者多进程的方式。然而I/O 多路复用使得程序能同时监听多个文件描述符,能够提高程序的性能,Linux 下实现 I/O 多路复用的系统调用主要有 select、poll 和 epoll。select主旨思想:首先要构造一个关于文件描述符的列表(fd_set类型 最大1024位 位数组128字节),将要监听的文件描述符添加到该列表中。调用一个系统函数,监听该列表中的文件描述符,直到这些描述符中的一个或者多个进行I/O操作时,该函数原创 2022-04-02 10:20:24 · 1542 阅读 · 0 评论