相关讨论
1.支持一个进程打开大数目的socket描述符(FD)
select
最不能忍受的是一个进程所打开的FD是有一定限制的,由FD_SETSIZE设置,默认值是2048。对于那些需要支持的上万连接数目的IM服务器来说显
然太少了。这时候你一是可以选择修改这个宏然后重新编译内核,不过资料也同时指出这样会带来网络效率的下降,二是可以选择多进程的解决方案(传统的
Apache方案),不过虽然linux上面创建进程的代价比较小,但仍旧是不可忽视的,加上进程间数据...
select, poll和epoll的区别(转载)
select()系统调用提供一个机制来实现同步多元I/O:
#include sys/time.h>
#include sys/types.h>
#include unistd.h>
int select (int n,
fd_set *readfds,
fd_set *writefds,
fd_set *exceptfds,
struct timeval *timeout);
FD_CLR(int fd, fd_set *set);
FD_ISSET(int fd, fd_set *set);
FD_SET(int fd, fd_set *set);
FD_ZERO(fd_set *set);
调用select()将阻塞,直到指定的文件描述符准备...
select()系统调用提供一个机制来实现同步多元I/O:
#[color="#ff0000"]include [color="#0000cc"]
[color="#0000cc"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000cc"]#[color="#ff0000"]include [color="#0000cc"]
[color="#0000ff"]int [color="#ff0000"]select [color="#0000cc"]([color...
请问大家:为什么select的并发会限制为一个进程所能打开的最大文件数,而poll,epoll则被限制为系统可以打开的总的文件数。是因为poll和epoll使用自定义的struct来存储fd吗? 但我感觉这与select直接存储fd在本质上是一样的。poll用struct pollfd的一个属性来存储fd,而epoll用struct epoll_event中的data这个union变量的fd来存储文件描述符,这与select直接存储文件描述符在本质上有什么区别呢?为什么select就被限制在单进程所能...
场景:在一个时间内(比如10s),不断地从某几个sock fd读数据
那么用select
while (true)
{
select(max_fd+1, &read_fds, NULL, NULL, &tmval_10s);
do_sth();
}
这样tmval_10s每次调用后都后减小,直到超时为止
而poll和epoll的超时参数是传值的,每次都得重设??
select ,poll,epoll阻塞方式的差别和效率
linux下select 和 poll的用法
2009-05-07 20:06
select()函数的作用
系统调用select和poll的后端实现,用这两个系统调用来查询设备是否可读写,或是否处于某种状态。如果poll为空,则驱动设备会被认为即可读又可写,返回值是一个状态掩码
如何使用select()函数?
select()函数的接口主要是建立在一种叫'fd_set'类型的基础上。它('fd_set') 是一组文件描述符(fd)的集合。由于fd_set类型的长度在不同平台上不同,因此应该...
linux下select 和 poll的用法select()函数的作用
系统调用select和poll的后端实现,用这两个系统调用来查询设备是否可读写,或是否处于某种状态。如果poll为空,则驱动设备会被认为即可读又可写,返回值是一个状态掩码
如何使用select()函数?
select()函数的接口主要是建立在一种叫'fd_set'类型的基础上。它('fd_set') 是一组文件描述符(fd)的集合。由于fd_set类型的长度在不同平台上不同,因此应该用一组标准的宏定义...
select()系统调用提供一个机制来实现同步多元I/O:
#include sys/time.h>
#include sys/types.h>
#include unistd.h>
int select (int n,
fd_set *readfds,
fd_set *writefds,
fd_set *exceptfds,
struct timeval *timeout);
FD_CLR(int fd, fd_set *set);
FD_ISSET(int fd, fd_set *set);
FD_SET(int fd, fd_set *set);
FD_ZERO(fd_set *set);
调用select()将阻塞,直到指定的文件描述符准备好执行I/O,或者可选参数timeout指定的...
非阻塞 I/O 经常使用
poll(System V)、
select(BSD Unix)、 e
poll(
linux2.5.45开始)系统调用。
select系统调用select()的调用形式为:
#include <sys/select.h>
#include <sys/time.h>
int select(int maxfd, ...