Netty的基础架构模型

Netty是高性能的异步非阻塞NIO框架!

下面先来理解一下两组关键的概念。

同步和异步

拿方法调用来说,同步是指调用一个方法能够在方法结束时立即得到方法的结果,异步就是方法调用时没有返回结果,由另外的线程去做方法中的事情,当前线程可以去做其他的事情。异步调用的结果会通过中间状态改变或者回调函数等来通知。

拿一个生活的例子来说,同步就好比你去小区附近的一个4S点修车,老板在帮你修车,你一直在旁边等老板修好位置,可能是等1个小时,也有可能是等2天;而异步就好比你去修车,老板说修好了给你打电话来取车,你会可以回家等了,老板通过电话的形式来通知到你。

阻塞和非阻塞

用一个队列来说,当你需要从队列中获取一个元素,如果当前队列为空,那么线程会一直在当前方法处于等待,线程会挂起。非阻塞则不会挂起!侧重点在于线程是否会挂起。


基础架构模型

在这个基础架构模型中,创建了两个线程池,这两个线程池分别是boss线程池和worker线程池。在网络中,我们知道,一个连接过来,先要建立连接,然后再发送和接收信息。服务器开启时,boss线程池负责注册ServerSocketChannel到当前selector,事件为OP_ACCEPT连接事件,专门负责客户端请求的接收连接工作。boss线程池对于连接进来的SocketChannel,会交给worker线程池处理,worker线程池会将这个注册SocketChannel到selector,事件为OP_READ事件,专门处理消息的读取工作。

一般情况下,boss线程池中线程数量较少,worker线程池中线程数量较多。


我们可以把这样一个基础框架模型比喻成饭店吃饭,一般来说,客户去饭店吃饭,饭店有门口处的服务员接待客户到饭桌上,把点餐、倒水、上菜等工作交给大厅服务员。门口服务员接待了客户到饭桌上,就继续回到门口接待下一个要来吃饭的客户。而大厅服务员不可能是每一桌分配一个服务员,因为这样比较浪费,而且并不是时时刻刻每一桌都会有事情叫服务员帮忙,所以一个大厅服务员可以服务多个饭桌的客户,只要客户叫到,服务员就来帮忙。这里类似于selector的作用。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值