首页 > 其他分享 >为什么用netty

为什么用netty

时间:2023-09-21 11:02:22浏览次数:34  
标签:BIO 为什么 NIO netty selector AIO 线程 channel

1.BIO什么样?

在JDK1.4 以前java的IO都是BIO(Blocking IO),即阻塞型IO。

BIO模型解读:

  1. 客户端的请求和后端线程数1:1,导致在高并发下,大量创建和销毁线程,开销非常大。甚至可能会发生OOM。
  2. 创建连接后,会创建一个线程,当改线程没有任何操作时候,该线程会一直阻塞,浪费资源。

 

2.NIO什么样?

NIO模型解读:
Buffer:缓冲区,底层通过数组实现,每一种java基本类型都有对应缓冲区。
channel:基于通道实现,和流不同的是,通道是双向的,因此,一个通道可以实现读写操作。
selector:多路复用器/选择器,NIO会启动一个单线程来运行Selector,selector会不断轮询channel,但channel中有事件的时候,就会被selector挑选出来,获取它的SelectionKey集合,SelectionKey中包含不同的事件类型,根据不同的事件类型(OP_ACCEPT, OP_READ, OP_WRITE)进行不同的操作。

NIO的优点:

selector运行在单线程上,处理多个通道,避免了多线程上下文切换带来的系统开销。
一个channel并没有开启一个线程,而是channel中真正有事件的时候,才会开启线程进行读写操作,而BIO为每一个连接都开启了一个线程。
 

3.AIO模型

AIO是真正的异步IO,它将BIO中阻塞的步骤优化成了非阻塞的,但是目前AIO模型存在不足,它依赖于操作系统,window下的AIO性能很高,但是AIO在linux系统下却不完善。

 

标签:BIO,为什么,NIO,netty,selector,AIO,线程,channel
From: https://www.cnblogs.com/zqlmianshi/p/17719372.html

相关文章

  • 数据库为什么要索引(转)
    总结:数据库存储顺序随机,如果没有索引,每次查询都需要一行行遍历,查找出符合条件的点,复杂度O(N)数据库会按照rowid排序,并给主键建立索引,所以如果以rowid或者主键为搜索条件,复杂度可以近似看做二分查找的复杂度,即O(logN)如果没有主键,或搜索条件不是主键,可以给搜索目标增加索......
  • 工业交换机为什么有必要进行老化测试?
    我们可以根据客户的要求来制定老化测试的检测标准,如果没有特别的要求,我们将依照国家相应的标准进行老化测试检验。老化测试的主要目的是通过模拟产品在现实使用过程中所面临的各种恶劣条件,对产品进行高强度的测试。同时,根据产品的使用要求,合理预测其使用寿命。老化测试是为了确保产......
  • 为什么C#越来越恶心
    看看这个再看这些为什么一个活泼的语言越搞越像C++?C#发明了各种可爱的小玩意儿,尤其是async/await。但是它缺乏一个清晰的搞面向对象的头脑,设计者和VB的设计者非常像,语言就是工具,多搞点特性不是坏事,至于是否统一协调,能否由某个观念贯彻下来,他是不懂的。所以C#竟然把n......
  • 为什么说线控底盘技术对自动驾驶和智能化必须的?
      线控底盘技术是实现自动驾驶和智能化的关键之一。它通过使用电信号取代传统的机械连接,将驾驶员的操控动作转化为电信号,并通过电缆传输到执行机构,实现对车辆的控制。线控底盘由转向、制动、换挡、油门、悬架等系统组成。线控底盘的重要性体现在以下几个方面:提高响应速度:......
  • 为什么我的 ubuntu22.04 每安装一个软件,就需要重启很多服务?
    在一般情况下,安装一个软件通常不需要重启系统或服务。但是,有些软件的安装可能需要重启相关的服务或重新加载配置。以下是可能导致需要重启服务的几种情况:1.安装依赖关系:某些软件可能依赖于其他服务或库。在安装这些软件时,系统可能需要重启相关的服务以确保依赖项的正确配置和加载......
  • 为什么 Python 代码在函数中运行得更快?
    哈喽大家好,我是咸鱼当谈到编程效率和性能优化时,Python常常被调侃为“慢如蜗牛”有趣的是,Python代码在函数中运行往往比在全局范围内运行要快得多小伙伴们可能会有这个疑问:为什么在函数中运行的Python代码速度更快?今天这篇文章将会解答大家心中的疑惑原文链接:https://stac......
  • 软件安全测试为什么重要?
    在当前数字化时代,软件已经成为我们生活中不可或缺的一部分,无论是在工作中还是生活中,我们都离不开各种各样的软件。然而,随着软件的普及和应用范围的扩大,软件安全问题也逐渐凸显出来,给企业和个人带来了极大的困扰。因此,软件安全测试变得越来越重要。一、软件安全测试为什么很......
  • 简述为什么通信原理中正数的相频是0
    在通信原理中,正弦信号的相位通常用相位的相对变化来表示,而不是用绝对相位值。因此,对于正数频率的信号,其相位的相对变化为0,也就是相频为0。具体来说,对于一个正弦信号,其可以表示为:x(t)=Asin(ωt+φ)其中,A为振幅,ω为角频率,φ为初始相位。对于不同的频率成分,其相位是不同的。如果我们对......
  • 简述为什么通信原理中正数的相频是0
     在通信原理中,正弦信号的相位通常用相位的相对变化来表示,而不是用绝对相位值。因此,对于正数频率的信号,其相位的相对变化为0,也就是相频为0。具体来说,对于一个正弦信号,其可以表示为:x(t)=Asin(ωt+φ)其中,A为振幅,ω为角频率,φ为初始相位。对于不同的频率成分,其相位是不同的。如......
  • 【面试题精讲】为什么G1收集器不需要调优性能也很优秀
    G1(Garbage-First)收集器是一种面向服务器端应用的垃圾回收器,它在JDK7u4版本中首次引入,主要用于替代CMS(ConcurrentMarkSweep)收集器。相比于其他垃圾回收器,G1收集器具有很多优点,使得它在性能和调优方面表现出色。首先,G1收集器采用了分代收集的思想,将堆内存划分为多个大小相等的区......