创建Bootstraps

时间:2012-08-15 20:54:13

标签: java netty bootstrapping

为什么创建一个新的引导程序必须看起来如此尴尬?应该有比平常更简单的方法来做到这一点

serverBootstrap = new ServerBootstrap(new NioServerSocketChannelFactory(
    Executors.newCachedThreadPool(),
    Executors.newCachedThreadPool()));

它看起来非常可怕。比如,为什么我必须两次调用newCachedThreadPool()?

1 个答案:

答案 0 :(得分:0)

在最新版本的Netty中,您可以使用默认的NioServerSocketChannelFactory构造函数,它使用两个缓存的线程池,就像您当前所做的那样。然后,boostrap实例化看起来像这样,更简洁:

ServerBootstrap sb = new ServerBootstrap(new NioServerSocketChannelFactory());

请研究这些线程池的用途。在某些条件下(如slow loris attacks),此设置将无法正常工作,而是会导致Java进程耗尽堆空间。您可能需要查看Netty提供的MemoryAwareThreadPoolExecutor类。

缓存线程池本质上是邪恶的,因为它们具有达到“临界质量”的点。当存在非常高的线程数时,这是由于上下文切换的开销导致性能下降的情况。由于线程计数导致性能下降,线程池工作人员更慢地完成任务。由于这些工作人员忙于较长时间,因此缓存的线程池必须继续创建新线程以处理持续的工作负载。随着更多线程的创建,性能会继续降低事件的性能。问题有助于自身,您的服务器本质上会爆炸。玩得开心!