关于java:Netty是什么Netty为什么速度这么快线程模型分析

36次阅读

共计 2252 个字符,预计需要花费 6 分钟才能阅读完成。

哈喽!大家好,我是小奇,一位酷爱分享的程序员
小奇打算以轻松风趣的对话形式来分享一些技术,如果你感觉通过小奇的文章学到了货色,那就给小奇一个赞吧
文章继续更新,能够微信搜寻【小奇 JAVA 面试】第一工夫浏览,回复【材料】更有我为大家筹备的福利哟!回复【我的项目】有我为大家筹备的一些我的项目源码。回复【简历模板】有我为大家筹备的简历模板。

@[TOC]

一、前言

书接上回,当初下着大雨看来是去不了镇上买熟食吃了,然而在家待着也没有意思,去找我表弟玩吧,看看他在家干啥呢?

表弟家离我家很近,走一条街再拐几个弯就到了,大中午的应该在家刚做完饭,正好蹭饭。

正要推开门发现门外面锁着呢,这大白天的锁着门干啥呢,敲了敲门。

我:有人在家吗?

表弟:谁呀?

我:我,你哥。

表弟:哦,那没有人在家,你回吧!

我:连忙给我开门,别墨迹。

我说怎么这小子不开门,躲家里啃鸡腿呢,就怕我饭点来。

表弟:哥你咋来了?

我:咋?我还不能来啊!

表弟:你不是去北京找工作去了吗,怎么这么快就回来了。

我:别提了,当初工作不好找。

表弟:那不行你就回来跟我一起养猪吧,我老是进来卖猪肉,家里猪下崽了我也不能及时发现,你在家就能给我看着了。

我:当初哪里还用人看着猪圈啊,都是摄像头了。

表弟:啥是摄像头呢,去哪里找呢?

我:走,我带你去村里看看墙上刚打的广告。

表弟:说的真对,我当初就买一个。

我:你买吧,我回家做饭去了,你这就一个鸡腿还让你啃成这样子了,我走了。

回到家中做一个大米汤吧,炒一个蒜苔鸡蛋,正炒着菜呢电话响了。

我:“喂您好”。

对面:“您好,请问是小奇吗”。

我:“是我,你是?”。

对面:“我是 XXX 公司的,我看到 hr 推给我你的简历,我感觉还不错,你什么时候不便来现场面试一下”。

我:“当初不不便现场面试了”。

对面:“好吧,那你当初不便吗?咱们当初线上面试一下吧”。

我:“好的”。

二、面试

面试官:我看你简历上写的精通 Netty,那你能简略说一下 Netty 是什么吗?

我:Netty 首先是一个 java 开源框架,他是一个提供了异步的、基于事件驱动的网络应用程序框架,所以说 Netty 就是一个网络应用框架,能够开发出高性能、高牢靠的网络服务器和客户端程序。

面试官:嗯。那 Netty 为什么可能开发出高性能、高牢靠的网络服务器呢,他为什么速度这么快呢?

我:这得益于 Netty 的线程模型的架构设计,使得 Netty 能够基于 NIO 的设计理念对线程模型基于改良,使得 Netty 在解决客户端申请连贯,和客户端申请数据处理的时候能够疾速的进行解决。

面试官:嗯。你能跟我剖析一下 Netty 的线程模型吗?

我:Netty 模型中首先有这些属性概念。

BossGroup:相当于一个事件循环线程池,这个池中有多个事件循环线程。这个线程池是专门解决客户端的连贯事件的。

WorkerGroup:也是一个事件循环线程池,这个线程池是专门解决客户端的读写申请事件的。

NioEventLoop:这个就是事件循环线程,每一个事件循环线程都有一个 selector 用来监听事件。

NioSocketChannel:这个是在客户端与 BossGroup 中的一个事件循环线程建设连贯后生成的,将这个能够注册到 WorkerGroup 的一个事件循环线程上,让 WorkerGroup 的事件线程来解决后续的读写申请。

Pipeline:这个解决从 WorkerGroup 过去的数据,他蕴含很多 ChannelHandler,这些是真正解决数据的。

ChannelHandler:真正用来解决数据的。

面试官:嗯。能够讲一下从客户端连贯到发送数据的整个流程吗?

1、客户端向 BossGroup 发动连贯申请,BossGroup 中的 NioEventLoop 解决了连贯申请后生成一个 NioSocketChannel。

2、BossGroup 将 NioSocketChannel 注册到 WorkerGroup 中的一个 NioEventLoop 中的一个 Selector 上。至此 BossGroup 的工作实现,他接着解决其余客户端的连贯申请。

3、WorkerGroup 循环监听注册在本人的 Selector 上的这些 NioSocketChannel 有没有读写的事件产生。

4、WorkerGroup 监听到 NioSocketChannel 有读写事件产生就交给 Pipeline 解决。至此 WorkerGroup 工作实现,他持续解决其余客户端的读写事件。

5、Pipeline 接管到 WorkerGroup 发送过去的数据,而后交给 ChannelHandler 进行解决。

面试官:嗯。那 Netty 为什么比传统的网络编程工具更放慢呢?

我:因为 Netty 将客户端的连贯申请和读写数据的申请离开用两个线程池来解决,这样大大提高了效率。

面试官:“小伙子不错呀,什么时候能回北京入职呢”

我:“额。。。等等吧,当初家里雨太大了,容易弄一身巧克力。”

面试官:“行,那你来了北京肯定来咱们公司下班啊”

我:“额。。。这个跟你承诺不了,万一还有别的好公司给我打电话呢”。

面试官:“来吧,条件好磋商”

我:“我思考思考吧”。

三、总结

这里的相干内容还没有整顿结束,文章前面继续更新,倡议珍藏。

文章中波及到的命令大家肯定要像我一样每个都敲几遍,只有在敲的过程中能力发现自己对命令是否真正的把握了。

如果感觉我的文章还不错的话就点个赞吧,另外能够微信搜寻【小奇 JAVA 面试】第一工夫浏览,回复【材料】更有我为大家筹备的福利哟!回复【我的项目】有我为大家筹备的一些我的项目源码。回复【简历模板】有我为大家筹备的简历模板。

正文完
 0