【问题标题】:What is the benifit using netty4 NIO in the client side comparing to the one thread-per-connection blocking IO?与每个连接一个线程阻塞 IO 相比,在客户端使用 netty4 NIO 有什么好处?
【发布时间】:2016-08-07 04:54:55
【问题描述】:

我从服务器端看到,与每个连接阻塞 IO 一个线程相比,NIO 的好处是能够以更少的线程管理多个网络连接。

但是,如果我有一个 IO 客户端同时连接到数千台服务器,我是否可以使用类似的方法来使用更少的线程来管理这些连接 IO。我在Netty 4 multiple client 中尝试了这种方法,发现它为它创建的每个频道生成了一个“阅读器”线程。

所以,我的问题是:

1) 在客户端使用 netty/NIO 有什么好处? 2) 是否可以在客户端用更少的线程管理多个连接?

谢谢!

我已经在github上传了代码示例:https://github.com/hippoz/ogop-lseb

示例服务器/客户端类是 moc.ogop.ahsp.demo.nio.MultipleConnectionNioMain 和 moc.ogop.ahsp.demo.nio.NettyNioServerMain

【问题讨论】:

  • 无,除非您计划拥有大量出站连接,这并不常见。
  • 是的,实际上,我们在每个客户端/服务器之间使用持久连接。因此每个客户端可能同时连接到大约 1000 台服务器。
  • 那么在这种情况下(不遵循“持久连接”),您可以节省线程,但代价是更复杂的编码。我会先让它与java.net 一起工作,然后看看你是否有可伸缩性问题。
  • 即使我有同样的问题,但还没有得到答案?如果你得到答案,请分享

标签: multithreading netty nio


【解决方案1】:

拥有大量线程会在内核中产生上下文切换问题,当内核尝试跨内核重新调度线程时,会从每个内核加载和卸载更多内存。

NIO 无处不在的好处是性能。这几乎是我们使用它的唯一原因。使用阻塞 IO 要简单得多。使用工作者模型和 NIO,您可以限制进程使用的线程数(和潜在的计算时间)。因此,如果您有两个工作人员并且他们疯狂地使用 100% 的 cpu 时间,那么整个系统将不会因为您还有 2-4 个可用内核而陷入困境。

玩得开心!

【讨论】:

    猜你喜欢
    • 2011-09-26
    • 1970-01-01
    • 1970-01-01
    • 2016-05-21
    • 2017-04-18
    • 2015-03-24
    • 1970-01-01
    • 1970-01-01
    • 2011-06-12
    相关资源
    最近更新 更多