netty(六)--EventLoop和线程模型

线程模型指定操作系统、编程语言、框架或者应用程序的上下文管理的关键方面。开发人员需要理解与不同模型相关的权衡。

Netty 的 EventLoop 是协同设计的一部分,它采用了两个基本的 API: 并发和网络编程。首先, io.netty.util.concurrent 包构建在 JDK 的 java.util.concurrent 包上,用来提供线程执行器。其次, io.netty.channel 包中的类,为了与 Channel 的事件进行交互,
扩展了这些接口/类。
在这里插入图片描述


方法 描述
newScheduledThreadPool(int corePoolSize),newScheduledThreadPool(int corePoolSize,ThreadFactorythreadFactory) 创建一个 ScheduledThreadExecutorService,用于调度命令在指定延迟之后运行或者周期性地执行。它使用 corePoolSize 参数来计算线程数
newSingleThreadScheduledExecutor(),newSingleThreadScheduledExecutor(ThreadFactorythreadFactory) 创建一个 ScheduledThreadExecutorService,用于调度命令在指定延迟之后运行或者周期性地执行。它使用一个线程来执行被调度的任务

如果(当前)调用线程正是支撑 EventLoop 的线程, 那么所提交的代码块将会被(直接)
执行。否则,EventLoop 将调度该任务以便稍后执行,并将它放入到内部队列中。当 EventLoop
下次处理它的事件时, 它会执行队列中的那些任务/事件。这也就解释了任何的 Thread 是如何
与 Channel 直接交互而无需在 ChannelHandler 中进行额外同步的。注意,每个 EventLoop 都有它自已的任务队列,独立于任何其他的 EventLoop。图 7-3
展示了 EventLoop 用于调度任务的执行逻辑。这是 Netty 线程模型的关键组成部分。
在这里插入图片描述

####EventLoop/线程的分配
异步传输:异步传输实现只使用了少量的EventLoop,而且在当前线程模型中,他们可能被多个channel所共享。这使得尽量少的thread来支持大量的channel,而不是每个channel分配一个thread。
在这里插入图片描述

阻塞传输:这里每一个 Channel 都将被分配给一个 EventLoop(以及它的 Thread)。
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/ljz2016/article/details/82852945