同步读取read/recvfrom fd7
客户端发送数据
NIO弊端
1、每一个线程对应一个client 线程太多 消耗内存栈 默认1M 创建线程也要走系统调用 2、cpu调度 资源浪费 比如C10K或C100K 客户端1万个连接 但可能还有2个连接有数据 3、根本问题 blocking 阻塞的
man 2 socket
NIO
NIO弊端
1、重复传数据到内核 2、一次调用 内核本地方法的10万次遍历 内核 主动遍历 O(n)
解决方法
在内核开辟空间 1万 不用每次都传 不主动遍历 基于事件驱动
EPOLL
man epoll
1、在内核中创建一个fd8空间 2、新的连接都加入到这里 通过事件驱动 监听fd5文件描述符获得数据 将fd5到另外一个内核空间中去 3、程序从fd5内核空间读取数据即可
epoll充分利用硬件 尽量不浪费cpu
Nginx EPOLL