学习第44节
CPU 密集型,使用线程模型:
• Runtime.getRuntime().availableProcessors() * 2
• io.netty.availableProcessors * 2
• io.netty.eventLoopThreads
IO 密集型使用线程模型:
• 独立出 “线程池”来处理业务
• 在 handler 内部使用 JDK Executors
• 添加 handler 时,指定1个:
EventExecutorGroup eventExecutorGroup = new UnorderedThreadPoolEventExecutor(10);
pipeline.addLast(eventExecutorGroup, serverHandler)
写操作时常见的问题,容易每句写操作都加上writeAndFlush

对于此种问题的优化方法:
1、利用 channelReadComplete

但是此种方式也有缺点:
• 不适合异步业务线程 (不复用 NIO event loop) 处理:channelRead 中的业务处理结果的 write 很可能发生在 channelReadComplete 之后
• 不适合更精细的控制:例如连读 16 次时,第 16 次是 flush,但是如果保持连续的次数不变,如何做到 3 次就 flush
如果要克服这些问题,需要使用flushConsolidationHandler。
注:内容参考极客时间相关课程
本文探讨了Netty在CPU密集型与IO密集型场景下的线程模型选择及优化策略,包括如何合理配置线程数量,使用独立线程池处理业务逻辑,以及通过flushConsolidationHandler解决写操作中的常见问题。
535

被折叠的 条评论
为什么被折叠?



