Я всегда думал, что асинхронность - это эффективное использование ресурсов и безопасность потоков, но сегодня я столкнулся со странным поведением Нетти.
public class Example {
public static void main(String[] args) throws Exception {
EventLoopGroup group = new NioEventLoopGroup();
ServerBootstrap bootstrap = new ServerBootstrap();
try {
bootstrap.group(group)
.channel(NioServerSocketChannel.class)
.childHandler(new ChannelInitializer<SocketChannel>() {
@Override
public void initChannel(SocketChannel channel) {
channel.pipeline()
.addLast(new ChannelOutboundHandlerAdapter() {
@Override
public void read(ChannelHandlerContext ctx) {
String id = String.valueOf(Thread.currentThread().getId());
ctx.writeAndFlush(Unpooled.wrappedBuffer(id.getBytes(StandardCharsets.UTF_8)))
.addListener(ChannelFutureListener.CLOSE);
}
});
}
})
.bind("localhost", 1234)
.sync()
.channel()
.closeFuture()
.syncUninterruptibly();
} finally {
group.shutdownGracefully()
.syncUninterruptibly();
}
}
}
Когда я подключился в первый раз, я получил 16. Затем 17, 18, 19 и т. Д. Каждое соединение выполняется в новом потоке! Зачем? Какой смысл в Netty, если он многопоточный?