相关讨论
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阻塞方式的差别和效率
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, ...