【问题标题】:Creating Bootstraps创建引导程序
【发布时间】:2012-08-15 20:54:13
【问题描述】:

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

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

它的外观绝对是可怕的。比如,为什么我必须调用 newCachedThreadPool() 两次?

【问题讨论】:

    标签: java netty bootstrapping


    【解决方案1】:

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

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

    不过,请研究一下这些线程池的用途。在某些情况下(例如slow loris attacks),此设置不会很好地工作,而是会导致 Java 进程耗尽堆空间。出于这个原因,您可能需要查看 Netty 提供的 MemoryAwareThreadPoolExecutor 类。

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-02-22
      • 2017-07-12
      • 1970-01-01
      • 2021-02-23
      • 2019-10-16
      • 2016-07-20
      相关资源
      最近更新 更多