Netty基本概念与传统IO线程模型

Netty

1.Netty是由JBOSS提供的 一个异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端
2.Netty可以帮助你快速,简单的开发出一个网络应用,相当于简化和流程化了NIO的开发过程
3.Netty是目前最流向的NIO框架,Netty在互联网领域,大数据分布式计算机领域,游戏行业,通信行业等过得了广泛的应用,Dubbo框架内部都采用了Netty

为什么要使用Netty?

1.NIO的类库和API繁杂,需要熟练掌握SelectorServerSocketChannel,ByteBuffer等。
2.需要具备其他的额外技能,比如多线程和网络编程
3.开发工作量和难度都非常大,例如客户端面临重连,网络闪断,半包读写,失败缓存,网络拥塞和异常流的处理等等
4.JDK NIO的Bug: Epoll Bug 它会导致Selector空轮询,最终导致CPU 100%,直到JDK1.7还没有被根本解决

Netty的优点:

Netty对JDK自带的NIO进行了封装,有如下优点:
1.设计优雅,适用于各种传输类型的统一API阻塞和非阻塞Socket,基于灵活且可扩展的事件模型,可以清晰地分离关注点,高度可定制的线程模型(单线程,一个或者多个线程池)。
2.使用方便,详细记录的Javadoc,用户指南和示例,没有其他依赖,JDK1.5就足够了。
3.高性能,吞吐量更高:延迟更低,减少资源小高:最小化不必要的内存复制.
4.安全:完整的SSL/TLS和StartTLS支持。
5.社区活跃,不断更新:社区活跃,版本迭代周期短,发现Bug可以被及时修复,同时,更多的新功能会被加入。

Netty的线程模型:

传统IO模型
Reactor模式
单Reactor单线程
单Reactor多线程
主从Reactor多线程
Netty线程模式(Netty主要基于主从多线程模型做了一定的改进,其中主从Reactor多线程模型有多个Reactor)

传统IO模式

模型图:
在这里插入图片描述
模型特点:
1.采用阻塞IO模式获取输入的数据
2.每个连接都需要独立的线程完成数据的输入,业务处理,数据返回

问题分析:
1.并发量大,就会创建大量的线程,占用很大的系统资源。
2.连接创建后,如果当前线程暂时没有数据可读,该线程就会阻塞在read操作,造成线程资源浪费。

学习年限不足,知识过浅,说的不对请见谅。

世界上有10种人,一种是懂二进制的,一种是不懂二进制的。

发布了71 篇原创文章 · 获赞 54 · 访问量 42万+

猜你喜欢

转载自blog.csdn.net/weixin_43326401/article/details/104202149
今日推荐