为什么使用select函数以及如何使用select函数
为何使用select函数
多进程服务器端的缺点和解决方法
为了构建并发服务器,只要有客户端连接请求就会创建进程。这的确是实际操作中采用的一种方案,但并非十全十美,因为创建进程时需要付出极大代价,这需要大量的运算和内存空间,由于每个进程都具有独立的内存空间,所以相互间的数据交换也要求采用相对复杂的方法(IPC属于相对复杂的通信方法)。
那有何解决方案呢?能否在不创建进程的同时向多个客户端提供服务? 答案是肯定能,I/O复用就是解决方法之一(还可以通过线程池解决,之后会讲解线程池)
如何使用select函数
运用select函数是最具代表性的实现复用服务器端的方法,而且他具有很好的移植性(Linux与Windows之间有同名函数),接下来以Linux为例。
select函数具体参数以及返回值
#incldue <sys/select.h>
#include <sys/time.h>
int select (int maxfd,fd_set* readset,fd_set* writeset,fd_set*exceptset,const struct timeval* timeout);
maxfd:监视对象文件描述符数量(一般是最大的文件描述符值加1)
readset:将所有关注“是否存在待读取数据”的文件描述符注册到fd_set型变量,并传递其地址值。
wirteset:将所有关注“是否可传输无阻塞数据”的文件描述符注册到fd_set型变量,并传递其地址值。
exceptset:将所有关注“是否发生异常”的文件描述符注册到fd_set型变量,并传递其地址值。
timeout:调用select函数后,为防止无线阻塞的状态,传递超时(time-out)信息。

本文介绍了在多进程服务器端存在的问题,即频繁创建进程带来的资源消耗。为解决这一问题,文章提出了I/O复用的概念,并详细阐述了如何使用select函数来实现。select函数允许同时监视多个文件描述符,通过设置和检查fd_set结构体,监控读、写和异常状态。在给出的示例代码中,展示了如何监听标准输入并处理输入数据。通过使用select,可以在不创建新进程的情况下提高服务器并发处理能力。
最低0.47元/天 解锁文章

1777

被折叠的 条评论
为什么被折叠?



