Contains:
I/O复用模型使用在下列网络应用场合:
- 1、当客户处理多个FD时,必须使用I/O复用。
- 2、一个客户同事处理多个套接字是可能的。
- 3、如果一个TCP服务器处理多个socket。
- 4、如果一个服务器处理多个协议。
非阻塞I/O使我们可以调用open、read、write这样的I/O操作,并使这些操作不会永远阻塞。如果这种操作不能完成,则立即出错返回,表示该操作如继续执行将被阻塞。
对于一个给定的FD有两种方法对其指定
非阻塞I/O:
- 1、如果调用open获得描述符,则可制定O_NONBLOCK标志。
- 2、对于已经打开的一个FD,则可调用fcntl,由该函数打开O_NONBLOCK文件状态标志。
一、select函数
#include <sys/select.h>
#include <sys/time.h>
int select(int maxfdp1, fd_set *readset, fd_set *writeset, fd_set *exceptset, const struct timeval *timeout);
返回:若有就绪的FD则为其数目,若超时则为0,若出错则为-1。
首先,介绍最后一个参数:
timeout,它告知内核等待所指定描述符中的任何一个就绪可花多长时间。
这个参数有三种可能:
- 1、永远等待下去:仅在有一个FD准备好才返回。
- 2、等待一段固定时间:在一段时间范围内,有准本好的FD时返回。
- 3、根本不等待:检查描述符后立即返回,这称为轮询(polling)。
中间的三个参数
read set、
writeset、
except set指定我们要让内核测试
读、写和异常条件的FD
maxfdp1参数制定待测试的FD个数,它的值是待测试的MAX FD+1.
select使用描述符集,通常是一个整型数组。对应FD。
二、poll函数
#include <poll.h>
int poll(struct pollfd *fdarray, unsigned long nfds, int timeout);
返回:若有就绪的FD则为其数目,若超时则为0,若出错则为-1。
引用
与select不同,poll不是为每个状态构造一个描述符集,而是构造一个pollfd数组,每个数组元素指定一个描述符编号以及对其关心的状态。
struct pollfd {
int fd;
short events;
short revents;
};
fdarray数组中的元素数由nfds说明。
events fd感兴趣的事件
revents fd已发生的事件
poll的最后一个参数说明我们愿意等待多少时间。如同select一样,有三种不同的情形。
有关select和poll的区别
可参考链接:
http://zh.wikipedia.org/wiki/Select_(Unix)
参考资料:
APUE
UNP 卷1
分享到:
相关推荐
本文将深入探讨四种常见的IO复用机制:`select`、`poll`、`epoll`和`kqueue`,并结合源码分析如何在实际项目中应用它们。我们将通过分析`service.cpp`(服务端)和`client.cpp`(客户端)来理解这些机制的工作原理。...
在Linux系统中,Epoll是实现IO复用的主要机制,相比旧有的select和poll,Epoll提供了更好的性能和扩展性。 首先,我们要理解Epoll的工作原理。Epoll使用“事件驱动”的方式来处理IO操作。当一个socket准备好读写时...
本文将深入探讨网络I/O的基本概念,以及select、poll和epoll这三种I/O多路复用机制,并通过实际代码示例展示其在服务器并发中的应用。 首先,理解网络I/O。在网络通信中,数据传输通常涉及发送(output)和接收...
IO多路复用通过系统调用如select、poll、epoll等,让程序可以监控多个文件描述符(通常包括网络套接字)。当其中任一描述符准备好进行读写操作时,系统会通知程序。这种机制在处理多个客户端连接时非常有效,避免了...
在Linux中,常见的IO复用机制包括select、poll和epoll。其中,epoll由于其高效性和可扩展性,已经成为现代服务器开发的首选。 select方法在处理大量连接时存在效率问题,因为它需要对所有待监控的连接进行检查,...
三种IO多路复用机制: 一:select 二:poll 三:epoll 以上三种IO多路复用的完整代码,皆可以在我的资源列表中获取下载: 资源列表:http://download.csdn.net/user/qiulanzhu
### 多路IO复用并发服务器模型 #### 一、并发服务器模型概述 并发服务器模型是一种常见的网络编程架构,用于处理客户端与服务器之间的通信。它能够有效地管理多个客户端的连接请求,确保每个客户端都能获得及时的...
常见的IO复用技术包括轮询、信号驱动I/O以及最常用的套接字复用,如select、poll和epoll等。 首先,我们来看一下轮询机制。轮询是最早的IO复用方式,程序会定期检查所有I/O设备的状态,看是否有数据准备好进行读取...
在Linux系统中,有三种主要的IO复用机制:select、poll和epoll。它们都是同步I/O模型,意味着调用这些函数时,进程可能会被阻塞,直到有文件描述符准备好进行I/O操作。 1. **select** `select`函数用于监控文件...
在Unix/Linux系统中,最常用的IO多路复用方法包括select、poll和epoll。本示例主要关注的是select函数的使用。 **一、select函数介绍** select函数是C语言中的一个标准库函数,定义在`<sys/select.h>`头文件中。它...
1. IO复用的基本原理:介绍select、poll和epoll的工作机制,以及如何利用它们来实现对多个输入设备的监控。 2. 按键检测电路设计:解释如何将按键连接到GPIO引脚,以及如何配置中断机制来检测按键按下事件。 3. 微...
select,poll,epoll都是多路复用IO的函数,简单说就是在一个线程里,可以同时处理多个文件描述符的读写。 select/poll的实现很类似,epoll是从select/poll扩展而来,主要是为了解决select/poll天生的缺陷。 epoll在...
### Linux网络编程之IO复用循环服务器 #### 一、引言 在现代网络应用开发中,服务器的设计面临着越来越高的并发请求处理需求。传统的简单循环服务器每次只能处理一个客户端请求,这种方式显然无法满足高并发场景的...
在 Linux 系统中,IO 多路复用机制主要有三种实现方式:Select、Poll 和 Epoll。这里我们将对 Select 和 Poll 两种机制进行详细的解析。 Select 多路复用 Select 是一种传统的 IO 多路复用机制,通过使用 fd_set ...
三种IO多路复用机制: 一:select 二:poll 三:epoll 以上三种IO多路复用的完整代码,皆可以在我的资源列表中获取下载: 资源列表:http://download.csdn.net/user/qiulanzhu
而"IO复用.uv2"文件可能是一个项目工程文件,如编译配置或调试信息,这与源代码的编译和运行有关。 在实际应用中,使用I/O复用可以显著提高服务器的并发能力,例如在处理网络连接请求时,服务器可以同时监听多个...
描述中的“io复用修改时间”可能是在强调,当使用I/O复用机制(如select、poll、epoll等)时,对I/O对象(例如文件描述符或套接字)进行读写操作,可能会改变其对应的文件状态,包括修改时间。在某些系统中,这种...
Python3高级核心技术97讲-io复用 (select、poll 和 e.mp4
根据给定的信息,我们可以深入探讨多路IO复用的相关知识点,包括不同的通信模式、多任务IO服务器的概念、内核替代应用程序监视的方式、以及具体的实现细节和技术挑战。 ### 1. 多路IO复用的不同通信模式 #### 1.1 ...