![](/img/trans.png)
[英]netty EpollEventLoopGroup vs NioEventLoopGroup, which should I choose on CentOS 6?
[英]Why does netty provide EpollEventLoopGroup?
经过我的测试,netty的NioEventLoopGroup和EpollEventLoopGroup在性能上没有区别。 为什么netty还提供EpollEventLoopGroup?
当服务器维护1000个TCP链接时,CPU和服务器的memory没有区别,这是我的代码:
public class EpollServer {
public static void main(String[] args) throws Exception {
logger.info("port:"+System.getProperty("port", "8007"));
logger.info("isUseEpoll:"+System.getProperty("isUserEpoll","true"));
EventLoopGroup bossGroup;
EventLoopGroup workerGroup;
Class clazz;
if (useEpoll()) {
bossGroup = new EpollEventLoopGroup(1);
workerGroup = new EpollEventLoopGroup();
clazz = EpollServerSocketChannel.class;
}else{
bossGroup = new NioEventLoopGroup(1);
workerGroup = new NioEventLoopGroup();
clazz = NioServerSocketChannel.class;
}
final EpollServerHandler epollHandler = new EpollServerHandler();
try {
ServerBootstrap b = new ServerBootstrap();
logger.info("[socket Type]: {}", clazz.getSimpleName());
b.group(bossGroup, workerGroup)
.channel(clazz)
.option(ChannelOption.SO_BACKLOG, 10001)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel ch) throws Exception {
ChannelPipeline p = ch.pipeline();
p.addLast(new LengthFieldBasedFrameDecoder(1024,0,2,0,2));
p.addLast(new SimpleChannelInboundHandler(){
@Override
protected void channelRead0(ChannelHandlerContext ctx, Object msg) throws Exception {
ByteBuf content = (ByteBuf) msg;
ctx.channel().writeAndFlush(content.retain());
}
});
}
});
ChannelFuture f = b.bind(PORT).sync();
f.channel().closeFuture().sync();
} finally {
bossGroup.shutdownGracefully();
workerGroup.shutdownGracefully();
}
}
private static boolean useEpoll() {
if(isUseEpoll){
return Epoll.isAvailable();
}else{
return false;
}
}
}
我可以告诉你,在“重负载”场景中,肯定存在以下性能差异:
除此之外,本机 epoll 传输还支持 NIO 本身未公开的多种功能。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.