Netty学习1

Netty: https://netty.io
Netty:异步,基于事件驱动的网络应用框架.
为了快速开发高性能服务端和客户端.

图片找不到请加公众号:进击的星星

应用

ElasticSearch内置Netty,Dubbo内置
许多框架都内置了Netty框架.采用Netty进行框架内部的通信.实现分布式和集群的通信.
还广泛应用于游戏和即时通信IM.

详情地址:Https://bintray.com/netty/downloads/netty/

Netty线程模型


netty线程模型.首先要说到线程模型;分为几种:
	传统阻塞I/O服务模型:一个socket对应一个线程
	Reactor模型:
		是一种:略... ...
	Reactor扩展模型:根据不同的数据和需要处理的资源,
	发展出来的三种不同的Reactor模型.
	单Reactor,单线程
	单Reactor,多线程
	主从 Reactor 多线程 这三种模型.
	当然,其实还有别的I/O模型,比如百度五种I/O模型,就会出来许多.

主从Reactor多线程模型

Netty主要是基于Reactor多线程模型的.但不是单纯的Reactor多线程模型.而是做了一定的改进.
比如:主从Reactor多线程模型有多个Reactor

传统阻塞I/O模型

传统I/O模型中.黄色代表对象.蓝色代表线程,白色代表方法(API).
采用阻塞I/O方式获取数据.
在客户端发送数据,之前服务端等待连接.连接之后,使用 InputStream.read(byte[*])获取数据.如果没有获取到数据的话,会一直等待,直到有数据来临.
之后进行数据的处理.
我们的数据处理,时放在对象中.所有的方法是自己写的.
那么为什么阻塞不好呢;是因为线程是CPU调度的.A线程阻塞的话,那么CPU是不是会停着,等待该线程的数据呢.自然其他线程就不会运行了.

解决方案:

  1. 基于I/O复用模型:
多个连接共用一个阻塞对象.应用程序只需要在一个阻塞对象等待.
无需阻塞所有的连接.
当某个连接有数据返回时,操作系统通知应用程序,线程从阻塞状态返回,开始业务处理.
这里阻塞的时read,和handle方法.
因为handle方法会等待read读取数据,但read读取不到数据的话,就会阻塞.
所以说.这里只要解决,没有数据,就不阻塞,该干嘛干嘛去,或者没有数据就挂起,
等待数据来临,在调用对象连接的 handle方法进行业务处理

注意,这里来后端并不涉及多线程.还是一线程一客户端;一线程,一请求.
在这里插入图片描述
这里的话,比较类似分发模式.类似于SpringMvc的DispactherServlet. 所有的请求到达这个Servlet.然后根据请求路径调用对应的Controller和放方法. 这里所有的客户端连接,到达ServiceHandler.之后在分配给后端的线程. 这里4个客户端.每次连接,随机分配线程.解决了多线程问题.
2 . 基于线程池复用线程资源:

每个客户端连接时,会分配一个线程到后端的线程池当中.
这样的话,使用有限的线程,去处理无限的连接
通过一个或多个输入,同时传递给服务处理器的模式(基于事件驱动)

这里采用的是多线程模型.
Reactor:反应器模式;分发者模式;通知者模式notifier

  1. 综合
I/O多路复用+线程池模式.大大的减少了开销.提升了系统的性能.
本来一个Client 对应一个线程的.现在一个线程能处理好多个连接.

Reactor核心

1.Reactor:

reactor在一个单独的线程中运行.负责监听和分发事件.将事件分发给合适的处理程序对I/O事件做出反应.

这里可以理解为ServerSocket.监听着端口.每次等待客户端连接.生成Socket.
之后我们传统I/O会去读数据.但如果没有数据的话,会阻塞在读取数据这一步.
而NIO则不会.Reactor更不会.

2.Handlers:

处理程序执行I/O事件要完成的实际事件.
Reactor通过调度适当的处理程序相应I/O事件.处理程序执行非阻塞操作. 

3. Reactor 3种模式

3.1 单Reactor单线程

在这里插入图片描述
这里描述的是完整的Netty线程模型.最终版本. Netty模型封装并改进了NIO模型.

3.2 Netty的Reactor模式
Reactor使用I/O复用+线程池模式;在这里你会感觉特别想,跟上面的概念相比.而且上面的概念也重复了.这里相当于结合.
是一种思想.具体怎么实现,是要看代码的.但我们阅读源码的能力较弱.

在这里插入图片描述
这是Netty高并发的模型.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值