afaik,EventLoops由Executors支持," children / workers"由EventLoops支持,"父母/老板"管理孩子/工人的激活"在一个频道上。
是否有阻止队列来保存传入请求,直到有孩子可以处理它们为止?
孩子会创建多少个主题?
如果在支持子线程池的队列已满的情况下,如何确保拒绝父进程的传入通道事件?
很难辨别netty的底层线程池的配置位置和方式。
如果有人可以提供1& 2。
答案 0 :(得分:0)
是的,NioEventLoopGroup
扩展MultithreadEventExecutorGroup
,将EventExecutor[] children
创建为new SingleThreadEventExecutor[nThreads]
。此TaskQueue
的{{1}}为SingleThreadEventExecutor
。
http://netty.io/4.0/api/io/netty/util/concurrent/SingleThreadEventExecutor.html
NioEventLoopGroup()的标准构造函数创建了默认的事件循环线程数量:
LinkedBlockingQueue<Runnable>()
您可以将DEFAULT_EVENT_LOOP_THREADS = Math.max(1, SystemPropertyUtil.getInt(
"io.netty.eventLoopThreads", Runtime.getRuntime().availableProcessors() * 2));
作为JVM启动参数传递。
您还可以在NioEventLoopGroup()的构造函数中输入线程数。我们使用它作为例子:
io.netty.eventLoopThreads
private final static int BOSS_THREADS = 1;
private final static int MAX_WORKER_THREADS = 12;
EventLoopGroup bossGroup = new NioEventLoopGroup(BOSS_THREADS);
EventLoopGroup workerGroup = new NioEventLoopGroup(calculateThreadCount());
我实际上不知道Netty是否有内置功能。 AFAIK队列只需要private int calculateThreadCount() {
int threadCount;
if ((threadCount = SystemPropertyUtil.getInt("io.netty.eventLoopThreads", 0)) > 0) {
return threadCount;
} else {
threadCount = Runtime.getRuntime().availableProcessors() * 2;
return threadCount > MAX_WORKER_THREADS ? MAX_WORKER_THREADS : threadCount;
}
}
个线程。