博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Netty的基础架构模型
阅读量:2441 次
发布时间:2019-05-10

本文共 896 字,大约阅读时间需要 2 分钟。

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

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

同步和异步

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

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

阻塞和非阻塞

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

基础架构模型

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

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

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

你可能感兴趣的文章
Android将图像转换为Base64字符串或将Base64字符串转换为图像
查看>>
使用Firebase教程的Android实时聊天应用程序
查看>>
Android圆形按钮示例
查看>>
shell排序 c+_C和C ++中的Shell Sort程序
查看>>
c语言双精度的格式说明符_C中的格式说明符
查看>>
生产者消费者问题c语言_C中的生产者消费者问题
查看>>
继承中的钻石问题
查看>>
0-1背包问题 c语言_动态编程在C中的0-1背包问题
查看>>
firebase fcm_使用Firebase Cloud Messaging(FCM)的Android推送通知
查看>>
Android使用Volley将图像上传到服务器
查看>>
c语言 字符串字符反向储存_反向字符串的PL / SQL程序
查看>>
斐波那契程序_Fibonacci系列的PL / SQL程序
查看>>
pl/sql和sql 区别_SQL和PL / SQL之间的区别
查看>>
restful 示例_Android Restful Web服务客户端示例
查看>>
数字转日期 pl/sql_PL / SQL程序检查数字是奇数还是偶数
查看>>
pl/sql打印_PL / SQL程序以打印数字表
查看>>
使用宁静的Web服务(Java + MySQL)进行Android登录和注册
查看>>
sql求阶乘_PL / SQL程序查找数字的阶乘
查看>>
sql字符串反转_用于数字反转的PL / SQL程序
查看>>
snackbar_Android Snackbar示例
查看>>