机器配置:
4核8处理器
netty配置:
NioEventLoopGroup bossGroup = new NioEventLoopGroup(2);
NioEventLoopGroup workerGroup = new NioEventLoopGroup(coreProcessorsThread);//8
this.listenPort = listenPort;
serverHandler.init(basePackage);
bootstrap.group(bossGroup, workerGroup)
.channel(NioServerSocketChannel.class)
.option(ChannelOption.SO_BACKLOG, 128) // 用于临时存放三次握手的请求的队列的最大长度
.option(ChannelOption.SO_REUSEADDR, true)
.childOption(ChannelOption.SO_KEEPALIVE, true)
.handler(new LoggingHandler(LogLevel.INFO))
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
protected void initChannel(SocketChannel ch) throws Exception {
ch.pipeline().addLast(new StringEncoder(Charset.forName("UTF-8")));
ch.pipeline().addLast(new LineBasedFrameDecoder(1024 * 20));
ch.pipeline().addLast(new StringDecoder(Charset.forName("UTF-8")));
ch.pipeline().addLast(serverHandler);
}
});
并发统计:(20线程 循环次数10000)
并发统计:(500线程 循环次数200)
100线程1000次循环 数据库查询3-5ms
线程组(boss线程为1) | 吞吐量 |
---|---|
4 | 900 |
8 | 1375 |
10 | 1560 |
16 | 2000 |
20 | 2000 |
30 | 2000 |
30 | 1880 |
50 | 1700 |
100 | 1300 |
由于IO密集型任务线程并不是一直在执行任务,则应配置尽可能多的线程,如CPU核数*2
可以看出16个左右线程最优
参考公式:CPU核数 /(1 – 阻系数)
比如8核CPU:8/(1 – 0.9)=80个线程数
阻塞系数在0.8~0.9之间
版权声明:本文为qq_38898864原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。