【发布时间】:2012-01-25 16:29:40
【问题描述】:
我的系统中有 3 个 ThreadPoolExecutor。
一个用于 Netty 的 Master 进程,另一个用于 Netty 的工作进程,最后一个用于处理 ad-hoc 处理(向邮件服务器发送请求)。
ExecutorService bossExecutors = Executors.newFixedThreadPool(1,
new ServerThreadFactory("netty-boss"));
ExecutorService workerExecutors = Executors.newFixedThreadPool(10,
new ServerThreadFactory("netty-worker"));
ChannelFactory factory = new NioServerSocketChannelFactory(
bossExecutors,
workerExecutors,
Runtime.getRuntime().availableProcessors());
ExecutorService mailExecutor = Executors.newFixedThreadPool(40);
在mailExecutor 开始向邮件服务器发出请求之前,这一切正常。直到,使用mailExecutor 的批量请求,通常向邮件服务器发出 5000+ 个请求完成,netty 线程被阻塞。
我不明白为什么那个时候 netty 线程似乎被阻塞了,因为我已经分配了明确的线程池。在那段时间里,Netty 甚至无法处理单个请求。
知道为什么会发生这种情况或我做错了什么吗?
【问题讨论】: