Netty线程模型通俗意义理解

简介: Netty线程模型通俗意义理解

Netty4的线程模型,优化了上一个版本的线程处理出入站事件和任务的问题。下面,我用通俗易懂的例子来讲解一下。


1,首先是两个线程组的对应角色。boss线程组对应工地老板,负责承接建房的活。worker线程组对应管理分配任务的包工头。工地老板和包工头也需要人才市场牵线统一。人才市场会在建房工程启动前梳理二者的关系,如工地老板负责的公司的营业执照(属性),建造能力等以及包工头的施工队的安排。


2,接着包工头把任务分配给响应的A、B、C、...施工队,每个施工队都有专门负责的电工、砖瓦工、吊机工等。每一个施工队都能够从无到有且有序完成N座房子的建设,先购买材料,接着打地基,再是建墙,再是屋顶等。房子的建设离不开砖、瓦、水泥、钢筋、沙子等材料的购买(输入)、使用(输入)、废弃材料的处理(输出)等事务。如果某个房子出现工程事故也需要施工队的处理汇报。


3,如果某一时间,建房的任务很多,多至一个工地老板做不完。这就需要很多个工地老板。这就需要X个工地老板,Y个包工头。他们分别把对应的建房任务完成。(修改NioEventLoopGroup中的线程值)


4,工程启动后(通道打开后channel开启连接后),一车车砖、瓦、水泥、钢筋、沙子等材料源源不断送过来,首先确定该材料属于哪一个施工队的(判断该事件属于哪一个EventLoop),如果现在这个施工队在工作就把该材料给其,在工作的施工队就会将该材料分给某个房子的建设(某个通道的事件处理),如果没有,就把材料堆在某个地方(消息事件队列),等施工队开始工作了,再交与其处理。


工程角色VSNetty中的线程模型组件表如下所示

建房工程角色 Netty线程模型
工地老板 boss线程组NioEventLoopGroup
工地老板 worker线程组NioEventLoopGroup
人才市场 辅助启动类Bootstrap
A、B、C、...施工队 IO线程EventLoop
N座房子 多个通信通道channel
购买材料、 打地基、建墙、建屋顶任务完成 责任处理者Channelhandler(有序)
工程事故 抛异常exceptionCaught
施工队在工作 当前的线程在运行,可以处理事件


相关文章
|
3月前
|
编解码 网络协议 API
Netty运行原理问题之Netty的主次Reactor多线程模型工作的问题如何解决
Netty运行原理问题之Netty的主次Reactor多线程模型工作的问题如何解决
|
23天前
|
并行计算 JavaScript 前端开发
单线程模型
【10月更文挑战第15天】
|
25天前
|
安全 Java
Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧
【10月更文挑战第20天】Java多线程通信新解:本文通过生产者-消费者模型案例,深入解析wait()、notify()、notifyAll()方法的实用技巧,包括避免在循环外调用wait()、优先使用notifyAll()、确保线程安全及处理InterruptedException等,帮助读者更好地掌握这些方法的应用。
16 1
|
2月前
|
消息中间件 存储 NoSQL
剖析 Redis List 消息队列的三种消费线程模型
Redis 列表(List)是一种简单的字符串列表,它的底层实现是一个双向链表。 生产环境,很多公司都将 Redis 列表应用于轻量级消息队列 。这篇文章,我们聊聊如何使用 List 命令实现消息队列的功能以及剖析消费者线程模型 。
98 20
剖析 Redis List 消息队列的三种消费线程模型
|
1月前
|
NoSQL Redis 数据库
Redis单线程模型 redis 为什么是单线程?为什么 redis 单线程效率还能那么高,速度还能特别快
本文解释了Redis为什么采用单线程模型,以及为什么Redis单线程模型的效率和速度依然可以非常高,主要原因包括Redis操作主要访问内存、核心操作简单、单线程避免了线程竞争开销,以及使用了IO多路复用机制epoll。
47 0
Redis单线程模型 redis 为什么是单线程?为什么 redis 单线程效率还能那么高,速度还能特别快
|
1月前
|
安全 调度 C#
STA模型、同步上下文和多线程、异步调度
【10月更文挑战第19天】本文介绍了 STA 模型、同步上下文和多线程、异步调度的概念及其优缺点。STA 模型适用于单线程环境,确保资源访问的顺序性;同步上下文和多线程提高了程序的并发性和响应性,但增加了复杂性;异步调度提升了程序的响应性和资源利用率,但也带来了编程复杂性和错误处理的挑战。选择合适的模型需根据具体应用场景和需求进行权衡。
|
2月前
|
存储 机器人 Linux
Netty(二)-服务端网络编程常见网络IO模型讲解
Netty(二)-服务端网络编程常见网络IO模型讲解
|
1月前
|
消息中间件 NoSQL 关系型数据库
【多线程-从零开始-捌】阻塞队列,消费者生产者模型
【多线程-从零开始-捌】阻塞队列,消费者生产者模型
23 0
|
4月前
|
缓存 编译器 Go
开发与运维线程问题之Go语言的goroutine基于线程模型实现如何解决
开发与运维线程问题之Go语言的goroutine基于线程模型实现如何解决
55 3
|
4月前
|
算法 调度 人工智能
人工智能线程问题之无锁化编程如何解决
人工智能线程问题之无锁化编程如何解决
48 2