线程模型指定了os、编程语言、框架或应用程序的上下文中的线程管理的关键方面。如何、何时创建线程将对应用程序代码执行产生显著影响,开发人员必须理解不同模型之间的权衡。
而 Netty 的线程模型强大又易用,正如 Netty 的宗旨:简化你的应用程序代码,同时最大限度提高性能和可维护性。
1 线程模型血泪史
早期使用多线程是按需创建启动新 Thread 执行并发的任务单元,但这在高负载下表现很差。Java5 引入Executor,其线程池通过缓存和重用 Thread 极大提升性能。
基本的线程池化模式:
-
从池的空闲线程列表中选择一个 Thread,并被指派运行一个已提交的任务(Runnable实现) -
任务完成时,将该 Thread返回给该列表,使其被重用
-
Executor 的执行逻辑
虽然池化/重用线程相对为每个任务都创建、销毁线程是一种进步,但它并不能消除上下文切换的开销,其随线程数的增加而很快变得明显,并在高负载下更严重。此外,仅由于APP整体复杂性或并发需求,在项目生命周期内也可能会出现其他和线程相关问题。总之多线程处理很复杂,但 Netty 简化之!
2 EventLoop 接口
网络框架的基本功能
运行任务来处理在连接的生命周期内发生的事件。在代码中称为事件循环,即 io.netty.channel.EventLoop 。 
-
在事件循环中执行任务
EventLoop 是协同设计的一部分,采用了两个基本 API:并发和网络编程。
-
io.netty.util.concurrent包基于 JDK 的juc包而构建,以提供线程执行器 -
io.netty.channel包中的类,为了与Channel的事件交互,扩展了这些接口/类
-
EventLoop 的类层次结构
该模型中,一个 EventLoop 由一个永不变的 Thread 驱动,同时任务(Runnable 或 Callable)可直接提交给

最低0.47元/天 解锁文章
309

被折叠的 条评论
为什么被折叠?



