多路复用
使用一个进程(且只有主线程)同监控若干个文件描述符的读写,这种读写模式叫多路复用。
多用于TCP的服务端,用于监控客户端的连接和数据的收发
优点:不需要频繁的创建进程、销毁进程,从而节约了内存资源、时间资源,也避免的进程之间的竞争、等待。
缺点:单个客户端的任务不能太耗时,否则其它客户端就会感知到。
适合并发量高,但任务短小的情况,如:Web服务器。
select编程
fd_set 是文件描述符的集合,使用以下函数操作:
void FD_ZERO(fd_set *set);
功能:清空集合
void FD_CLR(int fd, fd_set *set);
功能:从集合中删除文件描述符
int FD_ISSET(int fd, fd_set *set);
功能:判断文件描述符是否在集合中
void FD_SET(int fd, fd_set *set);
功能:把文件描述符添加到集合中
int select(int nfds, fd_set *readfds, fd_set *writefds,
fd_set *exceptfds, struct timeval *timeout);
功能:监控多个文件描述符的 读、写、异常 操作
nfds:被监控的文件描述符中最大+1。
readfds:监控读操作的文件描述符集合
writefds:监控写操作的文件描述符集合
exceptfds:监控异常操作的文件描述符集合
timeout:设置超时时间
返回值:监控到发生相关操作的描述符个数ÿ