多路I/O转接服务器模型一(select)

1.select能监听的文件描述符个数受限于FD_SETSIZE,一般为1024,单纯改变进程打开
的文件描述符个数并不能改变select监听文件个数
2.解决1024以下客户端时使用select是很合适的,但如果链接客户端过多,select采用
的是轮询模型,会大大降低服务器响应效率,不应在select上投入更多精力

 1 #include <sys/select.h>
 2 /* According to earlier standards */
 3 #include <sys/time.h>
 4 #include <sys/types.h>
 5 #include <unistd.h>
 6 int select(int nfds, fd_set *readfds, fd_set *writefds,
 7 fd_set *exceptfds, struct timeval *timeout);
 8 nfds: 监控的文件描述符集里最大文件描述符加1,因为此参数会告诉内核检测前多少个文件描述符的状态
 9 readfds:监控有读数据到达文件描述符集合,传入传出参数
10 writefds:监控写数据到达文件描述符集合,传入传出参数
11 exceptfds:监控异常发生达文件描述符集合,如带外数据到达异常,传入传出参数
12 timeout:定时阻塞监控时间,3种情况
13       1.NULL,永远等下去
14       2.设置timeval,等待固定时间
15       3.设置timeval里时间均为0,检查描述字后立即返回,轮询
16 struct timeval {
17 long tv_sec; /* seconds */
18 long tv_usec; /* microseconds */
19 };
20 void FD_CLR(int fd, fd_set *set); 把文件描述符集合里fd清0
21
22 FD_ISSET(int fd, fd_set *set); 测试文件描述符集合里fd是否置1
23 void FD_SET(int fd, fd_set *set); 把文件描述符集合里fd位置1
24 void FD_ZERO(fd_set *set); 把文件描述符集合里所有位清0
时间: 2024-08-08 09:39:17

多路I/O转接服务器模型一(select)的相关文章

linux网络编程-----&gt;高并发---&gt;epoll多路I/O转接服务器

做网络服务的时候并发服务端程序的编写必不可少.前端客户端应用程序是否稳定一部分取决于客户端自身,而更多的取决于服务器是否相应时间够迅速,够稳定. 常见的linux并发服务器模型: 多进程并发服务器 多线程并发服务器 select多路I/O转接服务器 poll多路I/O转接服务器 epool多路I/O转接服务器. 本次主要讨论poll多路I/转接并发服务器模型: 前几章介绍完了多进程并发服务器,  多线程并发服务器, selete多路I/O转接服务器,  poll多路I/O转接服务器, 本章开始介

linux网络编程-----&gt;高并发---&gt;poll多路I/O转接服务器

做网络服务的时候并发服务端程序的编写必不可少.前端客户端应用程序是否稳定一部分取决于客户端自身,而更多的取决于服务器是否相应时间够迅速,够稳定. 常见的linux并发服务器模型: 多进程并发服务器 多线程并发服务器 select多路I/O转接服务器 poll多路I/O转接服务器 epool多路I/O转接服务器. 本次主要讨论poll多路I/转接并发服务器模型: 前几章介绍完了多进程并发服务器,  多线程并发服务器, selete多路I/O转接服务器,  本章开始介绍poll(linux特有)多路

多路I/O转接之select模型

I/O复用使得程序可以同一时候监听多个文件描写叙述符.这对提高程序的性能至关重要.通常,网络程序同一时候处理或者监听多个socket文件描写叙述符的时候可以考虑使用I/O复用模型. 值得强调的是.I/O复用尽管可以同一时候监听多个文件描写叙述符.但它本身是堵塞的.当有多个文件描写叙述符就绪的时候,假设不採取额外的措施,程序就仅仅能按顺序依次处理当中的每个文件描写叙述符,这使得server程序看起来像串行工作的. 假设要实现并发.仅仅可以使用多进程或者多线程的手段. select 系统调用的用途是

linux网络编程-----&gt;高并发---&gt;select多路I/O复用服务器

做网络服务的时候并发服务端程序的编写必不可少.前端客户端应用程序是否稳定一部分取决于客户端自身,而更多的取决于服务器是否相应时间够迅速,够稳定. 常见的linux并发服务器模型: 多进程并发服务器 多线程并发服务器 select多路I/O转接服务器 poll多路I/O转接服务器 epool多路I/O转接服务器. 本次主要讨论select多路I/O转接服务器模型: 使用select多路I/O转接服务器模型要考虑到以下几点: 1. select能监听的文件描述符个数受限于FD_SETSIZE, 一般

码海拾遗:高并发服务器模型简述

常见的Linux并发服务器模型有:多进程并发服务器.多线程并发服务器.select多路I/O转接模型.poll多路I/O转接模型.epoll多路I/O转接模型. 1.多进程并发服务器.多线程并发服务器 多进程并发服务器考虑因素: 父进程最大文件描述符个数(父进程中需要close关闭accept返回的新文件描述符) 系统内存创建进程个数(与内存大小相关) 进程创建过多是否降低整体服务性能(进程调度) 多线程并发服务器考虑因素: 调用进程内最大文件描述符上限 如果线程中需要共享数据,则需要考虑线程同

Linux统系统开发12 Socket API编程3 TCP状态转换 多路IO高并发select poll epoll udp组播 线程池

[本文谢绝转载原文来自http://990487026.blog.51cto.com] Linux统系统开发12 Socket API编程3 TCP状态转换 多路IO高并发select  poll  epoll udp组播 线程池 TCP 11种状态理解: 1,客户端正常发起关闭请求 2,客户端与服务端同时发起关闭请求 3,FIN_WAIT1直接转变TIME_WAIT 4,客户端接收来自服务器的关闭连接请求 多路IO转接服务器: select模型 poll模型 epoll模型 udp组播模型 线

I/O多路复用---select

常见的linux服务器类型 1.多进程并发服务器 2.多线程并发服务器 3.select多路I/O转接服务器 4.poll多路I/O转接服务器 5.epoll多路I/O转接服务器 多路IO是指单个线程通过记录跟踪每一个 IO流的状态同时来管理多个IO流,尽量提高服务器的吞吐量 与多进程多线程相比IO多路复用的计数最大优势就是系统开销小,不必创建进程/线程,也不必维护 进程/线程 IO多路复用使用场景 (1)当客户处理多个描述符时(一般是交互式输入或网络套接口) (2)当一个客户同时处理多个套接口

I/O多路复用select/poll/epoll

前言 早期操作系统通常将进程中可创建的线程数限制在一个较低的阈值,大约几百个.因此, 操作系统会提供一些高效的方法来实现多路IO,例如Unix的select和poll.现代操作系统中,线程数已经得到了极大的提升,如NPTL线程软件包可支持数十万的线程. I/O多路复用 select select 允许进程指示内核等待多个事件中的任何一个发生,并只在有一个或多个事件发生或指定时间后返回它. select函数原型 #include <sys/select.h> #include <sys/t

linux网络编程-----&gt;高并发---&gt;多进程并发服务器

在做网络服务的时候并发服务端程序的编写必不可少.前端客户端应用程序是否稳定一部分取决于客户端自身,而更多的取决于服务器是否相应时间够迅速,够稳定. 常见的linux并发服务器模型: 多进程并发服务器 多线程并发服务器 select多路I/O转接服务器 poll多路I/O转接服务器 epool多路I/O转接服务器. 本次主要讨论多线程并发服务器模型: 使用多进程并发服务器时要考虑以下几点: 父进程最大文件描述个数(父进程中需要close关闭accpet返回的新文件描述符) 系统内创建进程个数(与内