Java 网络IO编程总结 nio netty原理 bio nio aio io多路复用 事件驱动 信号驱动 汇总总结

news2024/12/23 12:32:28

目录

​编辑

io 多路复用

NIO

多线程 和 io多路复用区别 :

Netty 操作流程

看了众多精简总结

Netty

Bio

Nio

Aio

Io多路复用

事件驱动

信号驱动


 

io 多路复用

I/O 多路复用模型是利用selectpollepoll可以同时监察多个流的 I/O 事件的能力,在空闲的时候,会把当前线程阻塞掉,当有一个或多个流有I/O事件时,就从阻塞态中唤醒,于是程序就会轮询一遍所有的流(epoll是只轮询那些真正发出了事件的流),依次顺序的处理就绪的流,这种做法就避免了大量的无用操作。这里多路指的是多个网络连接,复用指的是复用同一个线程。采用多路 I/O 复用技术可以让单个线程高效的处理多个连接请求(尽量减少网络IO的时间消耗),且Redis在内存中操作数据的速度非常快(内存内的操作不会成为这里的性能瓶颈),主要以上两点造就了Redis具有很高的吞吐量。

NIO

多线程 和 io多路复用区别 :

       多线程,切换线程进程需要切换内核,消耗时间和内存资源,io多路复用,单个线程处理不需要切换线程,高并发性能极佳,但是io多路复用开发复杂写的多,多线程写的少,io多路复用有点门户级开发思想,

举个例子:

一个餐厅有多个客人,餐厅等于一个线程,多个客人=多路复用统一个餐厅

跟多线程相比较,线程切换需要切换到内核进行线程切换,需要消耗时间和资源。而I/O多路复用不需要切换线/进程,效率相对较高,特别是对高并发的应用nginx就是用I/O多路复用,故而性能极佳。但多线程编程逻辑和处理上比I/O多路复用简单,而I/O多路复用处理起来较为复杂。

Netty 操作流程

创建ServerBootStrap

  1. 绑定端口等待链接
  2. 客户端链接,服务端注册信息出发 accpt方法
  3. 服务端注册通道,监测通道
  4. 通道检查道读写操作
  5. 通道处理程序header 处理读写任务

看了众多精简总结

Netty

链接socket使用了同步非阻塞 实现多次询问链接众多链接

注册的通道层实现了io多路复用,就是用的时候就去调用通知执行

使用 nio 不用aio原因

  1. Aio 是异步的 但底层也是epoll,加上jdk做了一层深层封装不便于开发加性能没有明显优势所以未选择
  2. Aio是 异步模式,netty 是 反应模式,如果吧异步模式开发成反应模式,相当于多此一举绕回来了,没必要

       2.aio传数据的时候会提前创建内存区域,占用性能,nio 传输的时候开辟内存区域,在链接量大的时候非常好内存资源

 

Bio

       是同步阻塞

Nio

       是同步非阻塞

Aio

       是异步实现

Io多路复用

       使用select 和epoll 实现

       平常一个线程注册多个通道 ,通过轮询检测那个通道有读写任务,然后对应去执行实现单线程io多路复用

事件驱动

       Io多路复用就是事件驱动,循环发现有读写任务事件,就去驱动执行任务。

信号驱动

       信号驱动是针对一个io完成过程,当一个任务完成主动通知调用预设的任务,无需轮询检测

 

ok

持续更新

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/462559.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

【备忘录设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

简介 备忘录模式(Memento Pattern)是一种结构型设计模式。这种模式就是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并放在外部存储起来,从而可以在将来合适的时候把这个对象还原到存储起来的状态。备忘录…

接口冒烟测试方法

接口冒烟测试方法 今年遇到了几个问题,与接口的功能和性能相关,恰巧最近公司也在组织以冒烟测试为主题的活动,于是乎突发奇想,寻思着能否将接口测试与冒烟测试结合起来,发掘一些新的接口测试思路与方法。 平时对接口…

SpringBoot创建与运行

文章目录 一、SpringBoot是什么?二、SpringBoot项目创建IDEA创建SpringBoot项目网页版创建SpringBoot项目项目目录介绍输出Hello SpringBoot 一、SpringBoot是什么? 如果我们说Spring的诞生是为了简化Java程序开发的,那么SpringBoot的诞生是为…

【三十天精通Vue 3】 第十八天 Vue 3的国际化详解

✅创作者:陈书予 🎉个人主页:陈书予的个人主页 🍁陈书予的个人社区,欢迎你的加入: 陈书予的社区 🌟专栏地址: 三十天精通 Vue 3 文章目录 引言一、Vue 3 国际化概述1.1 国际化的概念1.2 国际化的作用1.3 V…

数据结构(数组、链表、栈、队列、树)

文章目录 1.数组1.1数组的特点1.2自定义数组 2.链表2.1链表的特点2.2自定义链表2.2.1自定义单向链表2.2.2自定义双向链表 3.栈3.1栈的特点3.2 Stack使用举例3.3 自定义栈 4. 队列5. 树与二叉树5.1 树的理解5.2 二叉树的基本概念5.3 二叉树的遍历5.4 经典二叉树和红黑树5.5 二叉…

Jmeter基础之---jmeter基础概念

JMeter 介绍: 一个非常优秀的开源的性能测试工具。 优点:你用着用着就会发现它的重多优点,当然不足点也会呈现出来。 从性能工具的原理划分: Jmeter工具和其他性能工具在原理上完全一致,工具包含4个部分&#xff1a…

GitLab与jekins结合构建持续集成(cl)环境(3)

目录 在jenkins上部署maven 配置maven jenkins回滚 Git方式回滚 通过发布时备份,回滚是选择指定备份文件进行回滚 jenkins添加邮件报警 Jenkins如何远程管理部署节点 Jenkins的远程管理方式: SSH Plugin Publish over SSH jenkins整合Ansible je…

山路转债上市价格预测

山路转债 基本信息 转债名称:山路转债,评级:AA,发行规模:48.36亿元。 正股名称:山东路桥,今日收盘价:7.3元,转股价格:8.17元。 当前转股价值 转债面值 / 转股…

港科夜闻|香港科技大学(广州)与中国电信广东公司签署战略合作协议

关注并星标 每周阅读港科夜闻 建立新视野 开启新思维 1、香港科技大学(广州)与中国电信广东公司签署战略合作协议。根据协议,双方将围绕各自科技创新及发展需要,整合双方的优质资源和优势能力,务实开展多方位的战略合作。本次合作&#xff0c…

ROS学习第四十二节——地图服务

https://download.csdn.net/download/qq_45685327/87721374 上一节我们已经实现通过gmapping的构建地图并在rviz中显示了地图,不过,上一节中地图数据是保存在内存中的,当节点关闭时,数据也会被一并释放,我们需要将栅格…

[译]理解 Rust 中的所有权

本文译者为 360 奇舞团前端开发工程师 原文标题:Understanding ownership in Rust 原文作者:Ukpai Ugochi 原文链接:https://blog.logrocket.com/understanding-ownership-in-rust/ 在 Stack Overflow 进行的开发人员调查中,Rust …

第二十六章 案例TodoList 之实现Footer组件

本小节,我们来实现最后的Footer组件的功能,它的功能主要有: 记录已完成和全部的任务列表数量点击【复选框】可以实现全选和全不选点击【删除已完成】按钮,可以将选中的任务项删除掉 实现已完成和全部的任务列表数量 步骤1&#…

提交Spark应用程序

文章目录 一,提交语法格式二,spark-submit常用参数三,案例演示 - 提交Spark自带的圆周率计算程序(一)Standalone模式,采用client提交方式(二)Standalone模式,采用cluster…

PMP第六版_1~3章

回想起来,距离上次看pmp已经过去一年多, 等着等着,第七版都出来了.自己还是没下决心考.第六版也都忘干净了.哎. 越来越不记事了.一转眼2023年了.哎…时间过得真快. 做个记录,顺便勉励自己吧. PMP 项目管理 按照十大知识领域来写的 要有美式思维 题干量大(因中英语言区别) 越…

Linux网络服务远程访问及控制SSH(你明目张胆的偏爱就是救赎)

文章目录 一、SSH的介绍及其相关知识点1.简介2.SSH的优点3.SSH的密钥登录 二、SSH的运用1.存放ssh服务端的配置文件2.白名单&黑名单3.存放ssh客户端的配置文件 三、ssh密钥登录操作1.密码验证2.秘钥对验证3.ssh远程登录SCP 远程复制SFTP获取服务端的文件 四、秘钥对的创建操…

nodejs+vue 校友录校友捐赠系统

校友录的设计与实现该系统面对的是用户和管理员,对于用户来说其最大的作用是在校友录的设计与实现前台查看校友活动、校友风采、校友捐赠、班级录、新闻中心、,其次进行交流园地。对管理员而言则是对用户、活动类型、校友活动、校友风采、校友捐赠、班级…

PCIE内核注册详解

代码结构 在Linux内核中,PCIe驱动程序的注册和处理涉及到许多文件,其中一些主要的文件包括: drivers/pci/pci.h:这个文件定义了PCIe驱动程序结构体和相关的函数。驱动程序需要包含这个头文件才能使用PCIe相关的函数和结构体。 d…

【观察者设计模式详解】C/Java/JS/Go/Python/TS不同语言实现

简介 观察者模式(Observer Pattern)是一种行为型模式。它定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变时,所有依赖于它的对象都得到通知并被自动更新。 观察者模式使用三个类Subject、Observer和Client。Subject…

ChatGPT热中的冷思考

欢迎关注博主 Mindtechnist 或加入【Linux C/C/Python社区】一起学习和分享Linux、C、C、Python、Matlab,机器人运动控制、多机器人协作,智能优化算法,滤波估计、多传感器信息融合,机器学习,人工智能等相关领域的知识和…

taro之项目初始化模版

项目初始化模板 一直以来,在使用 Taro CLI 的 taro init 命令创建项目时,CLI 会提供若干内置模板给开发者选择。但是很多团队都有自己独特的业务场景,需要使用和维护的模板也不尽一致,因此 Taro 支持把项目模板打包成一个能力赋予…