3.2 管道、事件和IO

Netty是一个非阻塞的,事件驱动的网络框架。实际上,这对您意味着Netty使用线程来处理IO事件。对于那些熟悉多线程编程的人,您可能会倾向于认为需要同步代码。这是不正确的,图3.1展示了Netty为什么使用设计来确保您不需要任何同步来处理Netty事件。

Figure 3.1  Diagram showing an EventLoopGroup and a Channel being bound to a single EventLoop permanently

图3.1显示Netty具有这些EventLoopGroup,而这些组又具有一个或多个EventLoops。将EventLoops视为执行通道实际工作的线程。

EventLoop 和线程的关系

EventLoop始终绑定到一个在其生命周期内从未改变的线程。

注册通道后,Netty会在该通道的生存期内将该通道绑定到单个EventLoop(因此也绑定到单个线程)。

这就是您的应用程序不需要在Netty IO操作上进行同步的原因,因为给定通道的所有IO总是由同一线程执行。

为了帮助解释这一点,图3.2显示了EventLoops与EventLoopGroups的关系。

Figure 3.2  Inheritance relationship for EventLoops and EventLoopGroups

EventLoop和EventLoopGroup之间的关系可能不是直观的,因为我们已经说过一个EventLoopGroup包含一个或多个EventLoop,但是此图显示实际上,EventLoop是一个EventLoopGroup。这意味着无论您可以在哪里传递EventLoopGroup,都可以只使用特定的EventLoop。

最后更新于

这有帮助吗?