相关讨论
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()系统调用提供一个机制来实现同步多元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指定的...
除了ngnix之外,还有没有比较好的采用epoll的开源代码?ngnix有点大,没太多时间学习它。
大牛赐教。
除了ngnix之外,还有没有比较好的采用epoll的开源代码?ngnix有点大,没太多时间学习它。
大牛赐教。
如题,不知道有没有这样的开源代码。
要真正在服务器上跑的,假想的不要,网上的例子太简单而且很多有明显的错误,居然转载还很多。
顺便问下chinaunix的简称是什么?:shutup:
epoll用到的所有函数都是在头文件sys/epoll.h中声明的,下面简要说明所用到的数据结构和函数:
所用到的数据结构
typedef union epoll_data {
void *ptr;
int fd;
__uint32_t u32;
__uint64_t u64;
} epoll_data_t;
struct epoll_event {
__uint32_t events; /* epoll events */
epoll_data_t data; ...
Linux 2.6内核中提高网络I/O性能的新方法-epoll I/O多路复用技术在比较多的TCP网络服务器中有使用,即比较多的用到select函数。
1、为什么select落后
首先,在Linux内核中,select所用到的FD_SET是有限的,即内核中有个参数__FD_SETSIZE定义了每个FD_SET的句柄个数,在我用的2.6.15-25-386内核中,该值是1024,搜索内核源代码得到:
include/linux/posix_types.h:
#define __FD_SETSIZE 1024
也
就是说,如果想要同时...