【Netty系列】Netty/BIO/NIO/AIO


一、Netty介绍

  1. Netty是一个开源的异步的事件驱动的网络应用框架,用于快速开发高性能的网络服务器和客户端。它主要用于构建可伸缩的网络应用程序,如协议服务器和客户端。
  2. Netty的设计目标是提供一个简单、快速、稳定的网络应用程序框架,同时保持灵活性和可扩展性。
  3. Netty基于NIO(非阻塞I/O)的事件驱动模型,使用了高效的线程池和优化的内存分配机制,使得它在处理大量并发连接时表现出色。
  4. Netty广泛用于构建各种类型的网络应用,包括Web服务器、游戏服务器、即时通讯系统等。

 Netty本质是一个NIO框架适用于服务器通讯相关的多种应用场景,要想透彻理解Netty,需要先学习NIO。

二、Java BIO/NIO/AIO

什么是I/O? 通常是指数据在内部存储器和外部存储器或其他周边设备之间的输入和输出。是信息处理系统与外部世界之间的通信。输入是系统接收的信号或数据,输出则是从其发送的信号或数据。I/O模型简单的理解就是用什么样的通道进行数据的发送和接收,很大程度上决定了程序通信的性能。

 Java支持三种网络编程I/O模型:BIONIOAIO

  1. Java BIO(Blocking IO):也称为同步阻塞I/O模型。应用程序发起I/O系统调用,在获得结果之前,应用程序进程会一直阻塞,直到获得到结果。其I/O过程是同步并阻塞的,服务器实现模式为一个连接一个线程,也就是说客户端有连接请求时服务器端就需要启动一个线程进行处理,如果这个连接不做任何事情的话,会造成不必要的线程开销。

【Netty系列】Netty/BIO/NIO/AIO_第1张图片
 该模型最大的问题就是缺乏弹性伸缩能力,当客户端并发访问量增加后,服务端的线程个数和客户端并发访问数呈1:1的正比关系,由于线程是JAVA虚拟机非常宝贵的系统资源,当线程数膨胀之后,系统的性能将急剧下降,随着并发访问量的继续增大,系统会发生线程堆栈溢出、创建新线程失败等问题,并最终导致进程宕机或者僵死,不能对外提供服务。
 弊端有很多:① 性能问题:一连接一线程模型导致服务端的并发接入数和系统吞吐量受到极大限制;② 可靠性问题:由于I/O操作采用同步阻塞模式,当网络拥塞或者通信对端处理缓慢会导致I/O线程被挂住,阻塞时间无法预测;③ 可维护性问题:I/O线程数无法有效控制、资源无法有效共享(多线程并发问题),系统可维护性差;

服务端:

import java.io.IOException;
import java.io.InputStream;
import java.net.InetSocketAddress;
import<

你可能感兴趣的:(Netty,nio,计算机网络,分布式,dubbo,spring,boot,spring,cloud,java)