epoll的事件机制是如何实现的?
当网卡接收到网络报文后,可以先解析到报文里面的ip地址与端口号,这样就可以定位到具体的socket。
我们再看看netty是如何利用epoll这个特性的。首先看看netty中channel的一个方法:
java.net.SocketAddress remoteAddress();
这个方法返回channel对应的远程地址。当网卡解析到网络报文后,就可以拿到ip和端口号,就可以定位到具体的channel,
这样,就不需要像select和poll那样遍历所有的fd来找就绪的事件。从而高效的通过事件机制,直接通知对应的channel来
处理事件。
epoll总结起来比poll和select等多路复用方式有两个改进点:
1、减少了遍历循环,因为活跃连接只占总并发连接的很小一部分;
2、内存拷贝的工作量。DirectByteBuf 和HeapByteBuf,DirectByteBuf可以省去数据从系统空间到用户空间拷贝的过程。