`
lianpeng0011
  • 浏览: 9100 次
社区版块
存档分类
最新评论

netty基础学习1

 
阅读更多
1、netty是什么
   Netty 是一个基于 JAVA NIO 类库的异步通信框架,它的架构特点是:异步非阻塞、基于事件驱动、高性能、高可靠性和高可定制性。
2、NIO入门
   首先我们看一下基于同步线程阻塞IO(BIO)的线程模型图


   从上图可以看出同步阻塞IO(BIO)存在以下几个问题:
   最大的问题就是缺乏弹性伸缩能力,服务端线程和客户端并发访问数量呈1:1的正比关系;
   性能差:频繁的线程上下文切换导致CPU利用率不高;
   可靠性差:由于所有的 IO 操作都是同步的,所以业务线程只要进行 IO 操作,也会存在被同步阻塞的风险,这会导致系统的可靠性差,依赖外部组件的处理能力和网络的情况。

    采用非阻塞 IO(NIO)之后,同步阻塞 IO 的三个缺陷都将迎刃而解:
    Nio 采用 Reactor 模式,一个 Reactor 线程聚合一个多路复用器 Selector,它可以同时注册、监听和轮询成百上千个 Channel,一个 IO 线程可以同时并发处理N个客户端连接,线程模型优化为1:N(N < 进程可用的最大句柄数)或者 M : N (M通常为 CPU 核数 + 1, N < 进程可用的最大句柄数);
    由于 IO 线程总数有限,不会存在频繁的 IO 线程之间上下文切换和竞争,CPU 利用率高;
    所有的 IO 操作都是异步的,即使业务线程直接进行 IO 操作,也不会被同步阻塞,系统不再依赖外部的网络环境和外部应用程序的处理性能。

  由于切换到 NIO 编程之后可以为系统带来巨大的可靠性、性能提升,所以,目前采用 NIO 进行通信已经逐渐成为主流。
   
    其次我们看下异步IO(NIO)的服务端和客户的工作时序图:
     JDK NIO 服务端通信时序图


                
                 
JDK NIO 服务端通信序列图

   
  JDK NIO 客户端通信时序图



                 
JDK NIO 客户端通信时序图

  
    不选择JAVA原生NIO编程的原因:
   (1)NIO的类库和API繁杂,使用麻烦,你需要熟练掌握Selector、ServerSocketChannel、SocketChannel、ByteBuffer等。
    (2)需要具备其他的技能做铺垫,例如熟悉JAVA多线程编程,这是因为NIO编程设计到Reactor模式,你必须对多线程和网络编程特别熟悉,才能编写出高质量的NIO程序。
     (3)可靠性能补齐,工作量非常大。例如客户端面临断链重连、网路闪断、半包读写和失败缓存等问题。
     (4)JDK NIO的BUG,例如臭名昭著的epoll bug,它导致Selector的空轮巡,最终导致CPU 100% 。

    为什么选择netty
   
    Netty是业界最流行的NIO框架之一,它的健壮性、功能、性能、可扩展性和可定制性在同类型框架中是首屈一指的,它已经得到成百上千的商用项目验证,例如Hadoop的RPC框架avro使用Netty作为底层的通讯框架。很多其他业界的主流RPC框架也使用了Netty来构建共性能的异步通讯能力。
   
    Netty有如下几个优点
   
    API使用简单开发门槛低;

    功能强大,预置了多种编码功能,支持多种主流协议;

    定制功能强,可以通过ChannelHandler对通信框架进行灵活的扩至;

    性能高,通过和其他业界主流的NIO框架对比,Netty的综合性能最优;

    成熟、稳定,Netty修复了所有的已知JDK NIO的BUG;

    社区活跃,版本迭代周期短,发现BUG可以及时的被修复。
  
 

   
  • 大小: 145.6 KB
  • 大小: 120.6 KB
  • 大小: 147.1 KB
分享到:
评论

相关推荐

    Netty基础,用于学习Netty,参考黑马程序员的netty教程

    Netty基础,用于学习Netty,参考黑马程序员的netty教程

    netty官网学习手册中文版

    这个“netty官网学习手册中文版”针对的是Netty的3.1版本,虽然现在的Netty已经发展到了5.x版本,但3.1版本的知识仍然具有历史参考价值,特别是对于那些初次接触或需要理解Netty基础概念的开发者来说。 1. **Netty...

    Netty实践学习案例

    1. **基础入门**:这些示例可能会涵盖如何创建一个简单的 Netty 服务器和客户端,展示如何设置 ChannelPipeline,添加处理器(Handler),以及如何进行数据的读写操作。 2. **编解码器的使用**:示例可能涉及自定义...

    Netty全套学习资源(包括源码、笔记、学习文档等)

    本资源包包含 Netty 的全方位学习材料,包括源码、笔记和学习文档,旨在帮助开发者深入理解和掌握 Netty。 一、Netty 源码解析 Netty 的源码是理解其工作原理的关键。通过阅读源码,我们可以了解到 Netty 如何实现...

    netty-netty-4.1.19.Final.zip_netty_netty学习_rocketmq

    Netty 是一个高性能、异步事件驱动的网络应用程序框架,用于快速开发可维护的高性能协议服务器和客户端。...深入学习和理解Netty,不仅能够帮助你更好地使用RocketMQ,也有助于你在其他领域开发高性能的网络应用。

    Netty学习资料.zip

    首先,资料部分可能包含了一些关于 Netty 的基础知识介绍,比如它的设计理念、核心组件以及在实际应用中的案例。这些资料可以帮助初学者快速建立起对 Netty 的整体认识,理解其在分布式系统、游戏服务器、流媒体服务...

    Netty 框架学习 —— 第一个 Netty 应用(csdn)————程序.pdf

    在本篇关于“Netty框架学习——第一个Netty应用”的文章中,我们将深入理解如何使用Netty构建一个简单的Echo服务器和客户端。Netty是一个高性能、异步事件驱动的网络应用程序框架,广泛应用于Java领域的服务器开发。...

    netty网络编程学习文档

    总的来说,这个Netty网络编程学习文档会提供一个全面的视角来理解和应用Netty,从基础的服务器和客户端搭建,到高级的特性利用,再到实战经验分享,都是提升网络编程能力的宝贵资源。通过深入学习和实践,我们可以...

    Netty4.0学习笔记系列之四:混合使用coder和handler

    在本篇Netty4.0学习笔记中,我们将聚焦于如何在实际应用中混合使用`coder`和`handler`,这是Netty框架中非常关键的一部分,对于构建高性能、低延迟的网络应用程序至关重要。Netty是一个用Java编写的异步事件驱动的...

    netty学习教程

    1. **Netty基础** - Netty架构:理解Netty的核心组件,如EventLoop、Channel、Pipeline和Buffer。 - 异步事件驱动:讲解Netty如何通过非阻塞I/O实现高效的网络通信。 - ByteBuf:Netty自定义的字节缓冲区,比Java...

    Java-NIO-Netty框架学习

    学习Netty,可以从基础的Socket编程开始,然后深入理解Java NIO的基本概念,接着熟悉Netty提供的各种组件和API,通过编写简单的服务端和客户端程序来实践。随着对Netty的理解加深,可以尝试实现更复杂的网络应用,如...

    Netty网络框架学习资源(珍藏版)

    这个“Netty网络框架学习资源(珍藏版)”压缩包包含了一份详细的Netty教学电子书,它涵盖了Netty的基础概念、通信协议、API使用以及加解密方法等多个方面,对于想要深入理解和掌握Netty的开发者来说,是一份非常...

    Netty实战.epub_netty实战epub_netty实战epub_netty_

    在Netty的学习过程中,首先需要理解的是它的基础概念。Netty基于NIO(非阻塞I/O)模型,提供了高效、易用的API,使得开发者可以方便地构建网络服务。它包含了服务器端和客户端的Bootstrap类,用于启动和配置网络应用...

    Netty权威指南完整版高清pdf

    总的来说,《Netty权威指南》是一本全面且深入的Netty学习资料,无论你是初学者还是有经验的开发者,都能从中获益,提升你的网络编程技能,为构建高性能、低延迟的网络应用打下坚实基础。通过阅读这本书,你将能够...

    Netty权威指南PDF书籍

    Netty 的设计目标是提供一个灵活且高效的基础架构,允许开发者快速构建网络服务,同时避免常见的性能瓶颈。 2. **Netty 的主要特点** - **异步事件驱动**:Netty 使用非阻塞 I/O 模型,提高了系统的并发处理能力。...

    netty1.zip

    这个"Netty1.zip"压缩包显然包含了作者自己编写的 Netty 示例代码,旨在帮助学习和理解如何使用 Netty 框架。下面我们将详细探讨 Netty 的核心概念以及这些自定义 demo 可能涵盖的知识点。 1. **Netty 的基本概念**...

    自己学习netty的笔记和Demo

    在Netty网络框架学习笔记-1中,可能详细介绍了NIO的基本概念,如选择器(Selector)、通道(Channel)和缓冲区(Buffer),以及它们如何协同工作以提高并发处理能力。 2. **Netty入门**:笔记-3和-5探讨了Netty的入门知识...

    Netty4.0学习笔记系列之五:自定义通讯协议

    在本篇“Netty4.0学习笔记系列之五:自定义通讯协议”中,我们将深入探讨如何在Netty框架下构建和实现自己的通信协议。Netty是一个高性能、异步事件驱动的网络应用框架,广泛应用于Java领域的服务器开发,如网络游戏...

    Netty 基础知识点学习汇总

    设计基础知识,初学者可以参照

Global site tag (gtag.js) - Google Analytics