SELECT和EPOLL模式

select模式

1.应用层首先初始化FD_SET(填入需要检测的socket集合),然后调用select函数
2.内核对FD_SET包含的所有socket进行了逐个检测,如果某个socket有状态发生,则填入内容分配一个数组,当所有socket都检查完成后,再将该数组copy到FD_SET中,然后返回应用层
3.select调用返回,应用层从返回的FD_SET中提取有状态发生的socket,并根据socket值映射客户端上下文(可以通过map或hash_map实现映射),然后处理收到的数据

epoll模式

1.应用层调用 epoll_wait检测有事件发生的连接
2.内核对epoll注册事件的socket进行跟踪,一旦某个socket有事件发生,便将其保存到一个内部数组。当接到应用层调用epoll_wait时,直接将该集合copy到epoll_wait数组返回给应用层即可,不需要象select模式对每个worker进行逐一检查。
3.epoll_wait调用返回,所有有事件发生的连接被填入一个epoll_event数组,应用层可根据epoll_event中的用户自定义变量 直接映射客户端上下文(不需要借助hash表),然后处理收到的数据