与每个连接的一个线程阻塞IO相比,客户端使用netty4 NIO的好处是什么?

时间:2016-07-19 10:43:10

标签: multithreading netty nio

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

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

所以,我的问题是:

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

谢谢!

我已将代码示例上传到github:https://github.com/hippoz/ogop-lseb

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

1 个答案:

答案 0 :(得分:0)

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

NIO的优势在于性能。这几乎是我们使用它的唯一原因。使用阻塞IO非常简单。使用worker模型和NIO可以限制进程使用的线程数(以及潜在的计算时间)。因此,如果你有两个工作人员并且他们使用100%的cpu时间去疯狂,整个系统都不会爬行,因为你有2-4个核心可用。

玩得开心!