JAVA开发(Netty框架与NIO)

news2024/11/25 17:08:34

所谓IO即input和output的缩写,是对数据的流入和流出的一种抽象。

其中NIO

NIO主要有三大核心部分:Channel(通道),Buffer(缓冲区),Selector(选择器)。

Channel(通道):通常NIO的操作都是由通道开始的,channel类似于流,每个channel对应一个buffer缓冲区,buffer底层是个数组。Channel会注册到Selector(选择器),由Selector根据channel读写事件的发生将其交给空闲的线程处理。

Buffer(缓冲区):buffer就是一个数组,本质上相当于一个内存区,读取数据时并不会一个字节一个字节的读取,而是将数据先写入到buffer(缓存区),再统一的写到硬盘上。

Selector(选择器):选择器也可以叫做多路复用器(选择那个线程执行),可以对应一个或多个线程。NIO 的Buffer和Channel都是既可以读也可以写的。

NIO与传统BIO的区别:

​传统的的BIO基于字节流或者字符流进行操作 ,而NIO基于Channel和Buffer进行操作,数据总是从通道读取到缓冲区中,或者从缓冲区写入到通道中。Selector用于监听多个通道的事件(比如连接打开,数据到达)。因此,单个线程可以监听多个数据通道。

BIO

NIO

面向流

面向缓冲区

阻塞IO

非阻塞IO

选择器

NIO源码包位于rt.jar下

有名的Netty通信框架就是架设在NIO的基础上的。

Netty三大特性:

1.并发高

​ Netty是一款基于NIO(Nonblocking IO),非阻塞开发的网络通信框架,对比BIO(Blocking IO),他的并发性能得到了很大的提高。

2.传输快

​ Java的内存有堆内存、栈内存和字符串常量池等等,其中堆内存是占用内存空间最大的一块,也是Java存放对象的地方。一般我们的数据如果需要IO读取到堆内存,中间需要经过Socket的缓冲区,也就是说一个数据会被拷贝两次才能到达他的终点,如果数据量大,就会造成不必要的资源浪费。

​ Netty针对这种情况,使用了NIO中的另一大特性–零拷贝,当他需要接受数据时,他就会直接从IO读到了那块内存中去,在netty里面通过ByteBuf可以直接对这些数据进行直接操作,从而加快了传输速度。

3.封装性,对NIO进行了透明化封装,形成框架,开箱即用。

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

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

相关文章

Day54 跨域CORS资源JSONP回调域名接管劫持

前言: #知识点: 1、子域名接管-检测&探针&利用 2、COSP跨域资源-检测&探针&利用 3、JSONP跨域回调-检测&探针&利用 #前置知识点: -同源策略(SOP)-“同源”包括三个条件:同协议 同域名 同端口 同源策…

C/C++之(五)洛谷刷题基础题 --- 新年好

学习之路,长路漫漫,写学习笔记的过程就是把知识讲给自己听的过程。 唯有热爱,可抵岁月漫长,唯有热爱,不畏世间无常! 新的一年祝你大展宏“兔” 新的一年,大家记得不要忘记刷题(⊙o⊙)&#xff…

NTN(四) RRC related

微信同步更新欢迎关注同名modem协议笔记。 这篇主要是与RRC层相关的内容,按照cell selection/re-selection->idle->connected 的顺序,对涉及NTN的内容进行总结。首先看下NTN RF相关的内容,这部分对应38.101-5这本spec。 NTN freq inf…

操作系统面试题(史上最全、持续更新)

尼恩面试宝典专题40:操作系统面试题(史上最全、持续更新) 本文版本说明:V28 《尼恩面试宝典》升级规划为: 后续基本上,每一个月,都会发布一次,最新版本,可以联系构师尼…

一个高效的通用光学卫星数据正射校正程序

李国春 随着高分辨率对地观测卫星发射的日益增多,对数据处理软件的要求也越来越高。通常每个系列卫星都有自己的数据特点并需要专门的处理软件,但卫星数量的增加为每种卫星单独设计软件的压力越来越大。本文介绍的一种处理方案旨在能够正射校正处理大多…

矩阵形状的读取和改变ndarray.shape()方法

【小白从小学Python、C、Java】【计算机等级考试500强双证书】【Python-数据分析】矩阵形状的读取和改变ndarray.shape()方法[太阳]选择题以下说法正确的是:import numpy as np a np.array([[1,2,3],[4,5,6]])print("【显示】a\n",a)print("【显示】…

【第十六篇】Camunda系列-动态表单

动态表单 接下来我们看看动态表单的应用,在Camunda中表单分为内置表单和动态表单。 1.内置表单 内置表单就是在绘制流程图的时候同时绘制表单。这种方式其实就是绑定了对应的流程变量,不是太灵活。但还是来讲解下。 1.1 启动流程绑定 我们先来看下在启动流程的时候就设置相…

点击化学Alkynyl Myristic COOH,82909-47-5,13-十四炔酸

基础产品数据(Basic Product Data):CAS号:82909-47-5中文名:炔基-肉豆蔻酸,13-十四炔酸英文名:Alkynyl Myristic Acid,Alkynyl Myristic COOH试剂基团反应特点(Reagent g…

c++模板,选择排序,字符数组,字符串

目录 1.模板 1.1模板概念 1.2.函数模板 1.2.1函数模板语法,函数模板的调用--1.自动类型推导,2.显示指定类型 1.2.2函数模板注意事项 ​编辑 1.2.3函数模板的案例,选择排序,字符数组,字符串 1.2.4普通函数与函数…

C语言中的回调函数 和 函数指针

以冒泡排序为例&#xff1a; void sort(int *a, int size) {int i, j;for (i 0; i < size-1; i){for (j 0; j < size - i - 1; j){if (a[j] > a[j1]){int num a[j];a[j] a[j1];a[j1] num;}}}}int main(){int arr[9] {1,2,3,4,5,6,7,8,9};sort(arr, 9); // sort…

列表元素的最大值,最小值,出现的次数和列表长度

1 获取列表中的最大元素和最小元素&#xff1a; 使用max和min可以分别获取一个列表中最大元素和最小元素的值&#xff0c;其语法格式为&#xff1a; max(list) 和min(list) 例&#xff1a;ls[12,34,56,87]#创建列表并赋给ls print(ls中最大元素值为&#xff1a;max(ls))#输出…

JDY-10M BLE组网模块介绍

JDY-10M BLE组网模块简介JDY-10透传模块是基于蓝牙4.0协议标准&#xff0c;工作频段为2.4GHZ范围&#xff0c;调制方式为GFSK&#xff0c;最大发射功率为8db&#xff0c;最大发射距离50米&#xff0c;具有功耗低、尺寸小、信号强、数据传输稳定等特性。JDY-10M BLE组网模块特征…

DM8:达梦数据库DEM部署说明(详细步骤)

DM8:达梦数据库DEM部署说明&#xff08;详细步骤&#xff09;1 创建一个数据库作为DEM后台数据库, 数据库dm.ini参数配置进行优化, 推荐配置:1.1 在该数据库中执行DEM的SQL脚本2 配置tomcat2.1 配置/tomcat/conf/server.xml2.2 修改jvm启动参数3 配置JAVA 1.8及以上版本的运行时…

潜力出众应该具有的特质

前言 先说一下背景&#xff0c;最近在以面试官的角色面试候选人的过程中&#xff0c;一直在思考一个问题&#xff1a;“如何判断一个候选人是否有潜力&#xff0c;是否适合这个岗位&#xff0c;入职后是否能能快速成长&#xff0c;成为独挡一面的人&#xff0c;一个有潜力的人…

手撕Pytorch源码#1.Dataset类 part1

写在前面手撕Pytorch源码系列目的&#xff1a;通过手撕源码复习了解高级python语法熟悉对pytorch框架的掌握在每一类完成源码分析后&#xff0c;会与常规深度学习训练脚本进行对照本系列预计先手撕python层源码&#xff0c;再进一步手撕c源码版本信息python&#xff1a;3.6.13p…

PHP MySQL 插入多条数据

使用 MySQLi 和 PDO 向 MySQL 插入多条数据 mysqli_multi_query() 函数可用来执行多条SQL语句。 以下实例向 "MyGuests" 表添加了三条新的记录: 实例 (MySQLi - 面向对象) <?php $servername "localhost"; $username "username"; $pas…

MWORKS 2023a 已上线!

同元软控不断打磨MWORKS产品&#xff0c;持续精进&#xff0c;于1月8日正式发布科学计算与系统建模仿真平台MWORKS 2023a。 欢迎大家前往同元软控官网下载MWORKS 2023a软件进行试用。我们在官网新增反馈问题入口&#xff0c;也欢迎大家提交工单以反馈产品建议。 1.MWORKS官方软…

FPGA:Vivado基于IP集成的计数器设计(3)

本节利用上一节创建和封装的ls61和ls00两个IP核。采用原理图设计的方式实现一个模9计数器&#xff0c;讲解IP核集成的Vivado设计流程。 &#xff08;1&#xff09;创建工程 创建一个名为count_bd的新工程&#xff0c;存于F:\FPGA\FPGAproject\exam文件夹下&#xff1b; &…

用 Goby 通过反序列化漏洞一键打入内存马【利用篇】

Goby 社区第 22 篇技术分享文章全文共&#xff1a;3734 字 预计阅读时间&#xff1a;10 分钟001 前言 在上一篇《Shell中的幽灵王者—JAVAWEB 内存马 【认知篇】》中&#xff0c;我从概念上介绍了很多内存马的东西&#xff0c;并给出了我的观点&#xff1a;“大势所趋下&#…

dvwa中的xss(跨站脚本)攻击

环境&#xff1a;dvwa: 192.168.11.135 dvwa版本&#xff1a; Version 1.9 (Release date: 2015-09-19)kail机器&#xff1a;192.168.11.156 一、XSS是什么XSS&#xff08;Cross Site Scripting&#xff0c;跨站脚本攻击&#xff09;&#xff0c;是指恶意攻击者往web页面里插入…