NIO介绍

Socket,NIO,Netty介绍 1. Socket回顾与I/0模型 1.1 Socket网络编程回顾 1.1.1 Socket概述 Socket,套接字就是两台主机之间逻辑连接的端点。TCP/IP协议是传输层协议,主要解决数据如何在网络中传输,而HTTP是应用层协议,主要解决如何包装数据。 Socket是通信的基石,是支持TCP/IP协议的网络通信的基本操作单元。 它是网络通信过程中端点的抽象表示,包含进行网络通信必须的五种信息:连接使用的协议、本地主机的IP地址、本地进程的协议端口、远程主机的IP地址、远程进程的协议端口。 1.1.2 阅读详情

一、JAVA NIO 与IO区别
IO NIO
面向流 面向缓冲区
阻塞IO 非阻塞IO
无 选择器 Selector

二、缓冲区和通道
Java NIO系统的核心在于:通道(Channnel)和缓冲区(Buffer)。通道表示打开到IO设备(例如:文件、套接字)的连接。若需要使用NIO系统,需要获取用于连接IO设备的通道以及用于容纳数据的缓冲区,然后操作缓冲区,对数据进行处理。简言之:Channel负责传输,Buffer负责存储。

缓冲区:一个用于特定基本数据类型的容器,由java.nio定义的,所有缓冲区都是Buffer抽象的子类,JAVA NIO 中的Buffer主要用于与NIO通道进行交互,数据是从通道读入缓冲区,从缓冲区写入通道

2.1 直接缓冲区和非直接缓冲区
字符缓冲区要么是直接,要么是非直接。如果为直接字节缓冲区,则java虚拟机会尽最大努力直接在此缓冲区傻瓜执行I/O操作,也就是说,在每次调用基础操作系统的一个本金I/O操作前(或后),虚拟机都会尽量避免将缓冲区的内容复制到中间缓冲区(或从中间缓冲区中复制内容)

直接字节缓冲区通过调此类的allocateDirect()工厂方法来创建。此方法返回的缓冲区进行分配和取消分配所需成本通常高于非直接缓冲区,直接缓冲区的内容可以驻留在常规的垃圾回收堆之外。因此,他们对应用程序的内存需求两年造成的影响可能并不明显。所以,建议将直接缓冲区主要分配给那些容易受基础系统的本机I/O操作影响大型、持久的缓冲区。一般情况下,最好仅在直接缓冲区能在程序性能方面带来明显好处时分配他们

直接字节缓冲区还可以通过FileChannel的map()方法将文件区域直接映射到内存中来创建,该方法返回MappedByteBuffer。Java平台的实现有助于通过JNI从本机代码创建直接字节缓冲区。如果以上这些缓冲区中的某个缓冲区实例指的时不可访问的内存区域,则试图访问该区域不会更改该缓冲区的内容,并且将会在访问期间或稍后的某个时间导致抛出不确定的异常

字节缓冲区时是直接缓冲区还是非直接缓冲区可以通过isDirect()方法来确定,提供此方法是为了能够在性能关键型代码中执行显式缓冲区管理

  /**
    * 一、缓冲区(Buffer):再Java NIO中负责数据的存储,缓冲区就是数组,用于存储不同数据类型
    *  根据数据类型不同(boolean)除外,提供了相应类型的缓冲区
    * ByteBuffer
    * CharBuffer
	* ShortBuffer  
	* IntBuffer
	* LongBuffer
	* FloatBuffer
	* DoubleBuffer
	* 上述缓冲区的管理方式一致,通过allocate()获取缓冲区
	*
	* 二、缓冲区存取数据的两个核心方法:
	* 	put():存入数据到缓冲区
	*   get():获取缓冲区的数据
	*   
	* 三、缓冲区的四个核心参数
	*  capacity:容量,表示缓冲区最大存储数据的容量,一旦声明不能改变
	*  limit:界限,表示缓冲区可以操作数据的大小,(limit后数据不能进行读写)
	*  position:位置,表示缓冲区中正在操作数据的位置
	*  mark: 标记,表示记录当前position的位置,可以通过reset() 恢复到mark的位置
	*  0 <= position <= limit <= capacity
	*  
	*  四、直接缓冲区和 非直接缓冲区
	*  	   非直接缓冲区:通过allocate()方法分配缓冲区,将缓冲区建立在JVM的内存
	* 	   直接缓冲区:通过allocateDirect()方法分配直接缓冲区,将缓冲区建立在物理内存中,
	*                 可以提高效率
	* 	
	**/
public class TestBuffer{
	
	@Test
	public void test(){
		//1.分配一个指定大小的缓冲区
		ByteBuffer buf = ByteBuffer.allocate(1024);
		
		System.out.println("-----------allocate()-----------");
		System.out.println(buf.position());  //0
		System.out.println(buf.limit());     //1024
		System.out.println(buf.capacity());  //1024
//2.利用put()存入数据到缓冲区
		String str = "abcde";
		buf.put(str.getBytes());
		System.out.println("-----------put()-----------");
		System.out.println(buf.position()); //5
		System.out.println(buf.limit());    //1024
		System.out.println(buf.capacity())  //1024
	
		//3.切换读取数据模式
		buf.flip()    //切换读取数据模式
		System.out.println(buf.position());  //0 从头开始读
		System.out.println(buf.limit());     //5 可以读取的数据是5个
		System.out.println(buf.capacity());  //1024
	
		//4.利用get()读取缓冲区的数据
		byte[] dst = new Byte[buf.limit()];
		buf.get(dst); //读取数据到字节数组中
		System.out.println(new String(dst,0,dst.length));

		System.out.println(-----------get()-----------);
		System.out.println(buf.position());  //5
		System.out.println(buf.limit());     //5
		System.out.println(buf.capacity());  //1024

		//5.rewind() 可重复读
		System.out.println("-----------rewind()-----------");
		System.out.println(buf.position());   //0 可以重新读刚才的数据
		System.out.println(buf.limit());      //5
		System.out.println(buf.capacity());   //1024
	
		//6.clear()清空缓冲区 但是缓冲区的数据依然存在,但是处于“被遗忘”状态 
		buf.clear();  
		System.out.println("-----------clear()-----------");
		System.out.println(buf.position());   //0
		System.out.println(buf.limit());      //1024
		System.out.println(buf.capacity());   //1024
		//验证缓冲区中是否有数据
		System.out.println((Char)buf.get());  //a
	}
	
	@Test
	public void test1(){
		String str = "abcde";
		ByteBuffer buf = ByteBuffer.allocate(1024);
		buf.put(str);
	
		buf.flip();
		byte[] dst = new byte[buf.limit()];
		buf.get(dst,0,2);

		System.out.println(new String(dst,0,2));  //ab
		System.out.println(buf.position()); //2
		
		//mark 标记
		buf.mark();  //标记position 位置
		buf.get(dst,2,2) //position 从2 读2个
		System.out.println(new String(dst,2,2)); //cd
		System.out.println(buf.position());   //4

		//reset()  恢复到mark标记的位置
		buf.reset();
		System.out.println(buf.position());  //2

		if(buf.hasRemaining()){
			//获取缓冲区可以操作的数量
			System.out.println(buf.remaining());
		}
	}
	
	@Test
	public void test2(){
		//分配直接缓冲区
		ByteBuffer buf = ByteBuffer.allocateDirect(1024);
		//判断缓冲区的类型
		System.out.println(buf.isDirect());
	}
}

通道(Channel)
由 java.nio.channels包定义的,Channel表示IO源与目标打开的连接,channe类似于传统的“流”,只不过Channel本身不能直接访问数据,Channel只能与Buffer进行交互

public  class TestNio{

	/**
	*  一、通道(Channel) 用于源节点与目标节点的连接,在Java NIO中负责缓冲区中的数据传输
	* 	  Channel本身不存储数据,因此需要配合缓冲区进行传输
	*
    *  二、通道的主要实现类
    * 	java.nio.channel.Channel 接口:
    * 	FileChannel
    * 	SocketChannel
    * 	ServerSocketChannel
    * 	DatagramChannel
    * 	
    * 三、获取通道
    * 	1.Java 针对支持通道的类提供了getChannel()方法
    * 	本地IO
    * 	FileInputStream/FileOutputStream
    * 	RandomAccessFile
	*   	
	*   网络IO
	* 	Socket
	* 	ServerSocket
	* 	DatagramSocket
	* 	
	*   2.在JDK 1.7中的NIO.2针对各个通道提供了静态方法open()
	* 	
	* 	3.在JDK 1.7中的NIO.2的Files 工具类newByteChannel()
	* 	
	*  四、通道直接的数据传输
	* 	transferFrom();
	* 	tramsferTo();
	* 	
	* 	五、分散(Scatter)和聚集(Gather)
	* 	分散读取(Scattering Reads):将通道分散到多个缓冲区
	* 	聚集写入(Gathering writes):将多个缓冲区中的数据聚集到缓冲区
	* 	
	* 	六、字符集Charset
	* 	编码:字符串 -> 字符数组
	* 	解码:字节数组-> 字符串
	**/
	
	@Test //1.利用通道完成文件的复制(非直接缓冲区)
	public void test1(){
		FileInputStream fis = null;
		FileOutputStream fos = null;
		FileChannel inChannel = null;
		FileChannel outChannel = null;
		
		try{
			fis = new FileInputStream("1.jpg");
			fos = new FileOutputStream("2.jpg");
			//①获取通道
			inChannel  =fis.getChannel();
			outChannel = fos.getChannel();
			
			//② 分配指定大小的缓冲区
			ByteBuffer buf = ByteBuffer.allocate(1024);
			
			//③ 将通道中的数据存入缓冲区
			while(inChannle.read(buf) != -1){
				buf.flip();//切换读取数据的模式
				//④将缓冲区的数据写入通道
				outChannel.write(buf);
				buf.clear(); //清空缓冲区
			}
		}catch(IOException e){
			e.printStackTrace()
		}finally{
			if (outChanel != null){
                try {
                    outChanel.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if (inChannel != null){
                try {
                    inChannel.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if (fos != null){
                try {
                    fos.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }

            if (fis != null){
                try {
                    fis.close();
                } catch (IOException e) {
                    e.printStackTrace();
                }
            }
        }
		}
	}
	
	//2.使用直接缓冲区完成文件的复制(内存映射文件)
	public void test2() throws IOException{
		FileChannel inChannel = FileChannel.open(Paths.get("1.jpg"),StandaradOpenOpetion.READ);
		FileChannel outChannel = FileChannel.open(Paths.get("2.jpg"),StandaradOpenOption.WRITE,
		StandaradOpenOption.READ,StandaradOpenOption.CREATE_NEW);
	
	//内存映射文件
	MappedByteBuffer inMapperBuf = inChannel.map(FileChanle.MapMode.READ_ONLY,0,inChannel.size());
	MappedByteBuffer outMapperBuffer  = outChannel.map(FileChannel.MapMode.READ_WRITE,
	0,inChannel.size());
	
	//直接对缓冲区进行数据的读写操作
	byte[] dst = new byte[inMappedBuf.limit()];
	outMapperBuffer.put(dst);
	
	inChannel.close();
	outChannel.close();		
	}
		
	//通道之间的数据传输,(直接缓冲区)
	@Test
	public void test3()	throws IOException{
		FileChannel inChannel = FileChannel.open(Paths.get("1.jpg"),StandaradOpenOption.READ);
		FileChanel outChannel = FileChannel.open(Paths.get("2.jpg"),StandaradOpenOption.WRITE,StandaradOpenOption.READ,	StandOpenOption.CREATE_NEW);
			
		//第一种方式
		//inChannel.transferTo(0,inChannel.size(),outChannel);
		//第二种方式
		outChannel.transferFrom(inChannel,0,inChannel.size());
	
		inChannel.close();
		outChannle.close();
	}
	
	@Test
	public void test4(){
		RandomAccessFile raf1 = new RandomAccessFile("1.txt","rw");
		
		//1.获取通道
		FileChannel channel1 = raf1.getChannel();
		//2.分配指定大小的缓冲区
		ByteBuffer buf1 = ByteBuffer.allocate(100);
		ByteBuffer buf2 = ByteBuffer.allocate(1024);
		//3.分散读取
		ByteBuffer[] bufs = {buf1,buf2};
		channel1.read(bufs);
		
		for(ByteBuffer byteBuffer: bufs){
			byteBuffer.filp();	
		}
		
		System.out.println(new String(buf[0].arrays(),0,bufs[0].limit()));
		System.out.println("-------------------------");
		System.out.println(new String(buf[1].arrays(),0,bufs[1].limit()));
		
		//4.聚集写入
		RandomAccessFile raf2 = new RandomAccessFile("2.txt","rw");
		FileChannel channel2 = raf.getChannel();
		channel2.write();
	}
		
	@Test
	public void test5(){
		Map<String,Charset> map = Charset.availableCharsets();
		Set<Map.Entry<String,Charset>> set = map.entrySet();

		for(Map.Entry<String,Charset> entry : set){
			System.out.println(entry.getKey() + "=" + entry.getValue());
		}
	}
		
	@Test
	public void test6(){
		Charset cs1 = Charset.forName("GBK");
		//获取编码器
		CharsetEncoder ce = cs1.newEncoder();
		//获取解码器
		CharsetDecoder cd = cs1.newDecoder();
	
		CharBuffer cBuf = CharBuffer.allocate(1024);
		cBuf.put("Hello World!");
		cBuf.filp();
	
		//编码
		ByteBuffer bBuffer = ce.encode(cBuf);
		for(int i = 0 ;i < 12 ; i++){
			System.out.println(bBuffer.get());
		}
	
		//解码
		bBuffer.flip();
		CharBuffer cBuf2 = cd.decode(bBuffer);
		System.out.println(cBuf.toString());
	}
}

深入解析Android Thermal框架:从应用层到驱动层的温度管理机制 本文深入解析Android Thermal框架的温度管理机制,从应用层到驱动层详细介绍了温度监测、热状态评估和降温策略执行的全过程。通过分层架构解析和关键组件交互,帮助开发者理解Android设备如何实现高效的温度控制,确保硬件安全并优化性能。 阅读详情

相关推荐

oracle p6 破解版下载,Primavera P6项目管理软件 16~17 图文详细安装教程(附下载)

Primavera P6 Professional项目管理软件结合了Oracle和Microsoft SQL Server关系数据库,是一款非常好用且功能强大的综合的项目管理软件(PPM) 解决方案,主要用于土建等方面的施工计划分析,具有进度时间安排与资源控制功能的多用户、多项目系统,支持多层项目分层结构、角色与技能导向的资源安排、记录实际数据、自定义视图以及自定义数据,本文主要为大家图文详细介绍...

weixin_33978451的博客 4916

NIO的基本介绍

一、什么是NIO Java NIO全称java non-blocking IO, 是指JDK提供的新API。从JDK1.4开始,Java提供了一系列改进的输入/输出的新特性,被统称为NIO(即New IO),是同步非阻塞的 NIO有三大核心部分: Channel(通道), Buffer(缓冲区),Selector(选择器) NIO是面向缓冲区,或者面向块编程的。数据读取到一个它稍后处理的缓冲区,需要时可在缓冲区中前后移动,这就增加了处理过程中的灵活性,使用它可以提供非阻塞式的高伸缩性网络。

莫失莫忘的博客 1万+

YOLOv8剪枝实战:基于torch_pruning的模型优化与性能提升指南

本文详细介绍了如何使用torch_pruning工具对YOLOv8模型进行结构化剪枝,以实现模型轻量化与性能提升。通过实战步骤解析,包括环境搭建、依赖图分析、迭代剪枝与微调策略,帮助开发者有效减少模型参数量和计算量,提升在边缘设备上的推理速度,同时保持检测(detect)与分割(segment)任务的精度。

water的专栏 1122

【精通NIO】NIO介绍

NIO入门介绍,了解基本原理和api使用

卓越之识论道,平常之识论事,狭隘之识论人 1846

VMware 安装 Windows11

一、下载win11的镜像文件 可以在MSDN网站下载: MSDN系统库-致力于原版windows生态服务 二、创建虚拟机 1.双击打开VMware虚拟机,点击创建新的虚拟机 2.选择典型(推荐),然后点击下一步 3.在安装程序光盘映像文件下,点击浏览按钮,选择Windows 11ISO镜像文件所在的路径,在Windows 11安装文件路径中不要有中文或其他特殊符号,否则有可能引起错误。然后点击下一步 4.在选择客户机操作系统界...

m0_56015193的博客 7016

CentOS8静默安装Oracle11.2.0.1

背景 新安装oracle,用静默安装方式就不需要安装图形界面了,省时省力。 前期准备工作与图形化安装一样,如创建用户|用户组、环境变量、内核参数、创建目录等. 可参考图形化安装,链接:https://blog.csdn.net/heroicpoem/article/details/104229369 环境 平台 版本 操作系统 centOS 8 Oracle 11gR2 1.响应文件 响应文件的内容就是图形化安装时手工设置的选项内容。 解压后,database/response/db

heroicpoem的专栏 4518

NIO简单介绍

简单介绍一下NIO的相关概念 与BIO、AIO做一下对比 介绍一下适用场景 NIO的核心原理

羽流云的博客 977

电机控制的智慧之眼:全面解析FOC状态观测器

摘要:本文深入探讨磁场定向控制(FOC)中的状态观测器技术,重点分析其在无传感器电机控制中的关键作用。文章详细介绍了滑模观测器(SMO)、扩展卡尔曼滤波(EKF)、龙贝格观测器和高频注入法等主流观测器的工作原理、技术特点及适用场景,其中SMO因结构简单、鲁棒性强成为当前主流方案。同时阐述了观测器与锁相环(PLL)结合的工程实践方案,并针对不同应用场景提供了观测器选型建议。文章还探讨了启动问题处理、参数敏感性等工程挑战的解决方案,以及混合观测器、AI应用等未来发展趋势。这些观测器技术使电机系统在无机械传感器情

汽车软件开发 274

Java NIO2介绍

Java NIO2介绍

zhangbinalan的专栏 786

智能硬件产品:做好一款电子硬件产品,工具必不可少

上到战略规划,中至运营策略,下至人性洞察,。最初做产品时,笔者从一开始就陷入到了对工具的痴迷,包括:PS、AutoCAD、PROE、犀牛、Axure、Keyshot、Altium……大概将 2 个多月的时间和精力都消耗在了学习使用工具上。通过工具的运用也确实提高了工作效率,在仅有创意的前提下通过灵活运用工具,一年内便成功申请了多个实用新型专利、设计了多款产品的高保真原型图等。正在上传…重新上传取消。

产品线负责人 1442

小龙虾OpenClaw卸载全攻略,彻底清理缓存和配置,干净无残留!

不想要的小龙虾OpenClaw怎么彻底卸载?🦞本文教你如何彻底的卸载OpenClaw⚡️,Windows/macOS/Linux通用,干净无残留🧹

XiaoqiangClub的博客 313

NIO之NIO介绍

BIO     在介绍NIO之前,我们来了解一下BIO以及为什么会出现NIO。下面来见一段传统的BIO形式的代码。 Server ServerSocket server = new ServerSocket(); server.bind(new InetSocketAddress(9876)); while(true) { System.out.println("等待连接");

韶shls的博客 254

华为OD机试2025A卷 - 分苹果(Java & Python& JS & C++ & C )

华为OD机试2025A卷 - 分苹果(Java & Python& JS & C++ & C )

算法大师! 720

NIO的介绍

NIO是什么? 是同步非阻塞,服务器实现模式为一个请求一个线程,即客户端发送的连接请求都会注册到多路复用器上,多路复用器轮询到连接有IO请求时才启动一个线程进行处理。连接数目多且连接比较短(轻操作)的架构,比如聊天服务器。 JDK1.4引入的一种新型IO。对BIO的一种改进,基于Reactor模型。一个Socket连接其实只有在一小部分情况下才会发生数据 传输IO操作,大部分...

weixin_42262357的博客 285

TMS_WebGMaps_1.9.8.0_Full_Source

TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder

ssm框架搭建

这个是一个在idea上成功跑起来的ssm框架项目,保存在这里方便以后使用直接下载

nio的介绍

一、几个概念 1、阻塞与非阻塞 阻塞与非阻塞是描述进程在访问某个资源时,数据是否准备就绪的的一种处理方式。当数据没有准备就绪时: 阻塞:线程持续等待资源中数据准备完成,直到返回响应结果。 非阻塞:线程直接返回结果,不会持续等待资源准备数据结束后才响应结果。 2、同步与异步 同步与异步是指访问数据的机制,同步一般指主动请求并等待IO操作完成的方式。异步则指主动请求数据后便可以继续处理其它任务,随后等待IO操作完毕的通知。 二、NIO基础 1、传统BIO模型 传统BIO是一种同步的阻塞IO,I

G探险者的博客 225

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

Java NIO介绍

Java NIO Java NIO 是 java 1.4, 之后新出的一套IO接口NIO中的N可以理解为Non-blocking,不单纯是New。 NIO的特性/NIO与IO区别 1)IO是面向流的,NIO是面向缓冲区的; 2)IO流是阻塞的,NIO流是不阻塞的; 3)NIO有选择器,而IO没有。 读数据和写数据方式 从通道进行数据读取 :创建一个缓冲区,然后请求通道读取数据。 从通道...

thebigdipperbdx的博客 226

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

基于springboot蔚来汽车对比推荐平台的介绍

摘要:本文介绍了一个基于SpringBoot的蔚来汽车对比推荐平台,该系统整合蔚来全系车型数据,提供多维度对比、个性化推荐及社区互动功能。平台包含车型对比模块(支持可视化分析)、智能推荐引擎(基于用户需求)、用户评价社区以及试驾预约等服务。技术架构采用微服务设计,结合SpringBoot+Vue.js+MySQL+Redis等技术栈,具备高并发处理和模块化扩展能力。未来计划融合AI推荐、VR展示等创新功能,优化购车决策体验。系统已实现完整部署方案,提供源码和技术支持服务。

qq_1039692211的博客 1011

【Java NIO】NIO介绍

概述 新IO使用内存映射文件的方式来处理输入/输出,新IO将文件或文件的一段区域映射到内存中,这样可以像访问内存一样来访问文件(OS里虚拟内存的概念)。   原理          系统运行的性能瓶颈通常在I/O读写,包括对端口和文件的操作上,过去,在打开一个I/O通道后,read()将一直等待在端口一边读取字节内容,如果没有内容进来,read()也是傻傻的等,这会影响我们程序继续做...

保持学习、思考和实践 186

java的NIO介绍

关于javaNIO,可能更多人了解的是他的一些并发方面的东西,之前没有怎么了解过,到网上找了些资料,看看学学,得在实践中获得知识才行,先留着吧!下面是找的资料: 1. 基本概念 IO是主存和外部设备(硬盘、终端和网络等)拷贝数据的过程。IO是操作系统的底层功能实现,底层通过I/O指令进行完成。 所有语言运行时系统提供执行I/O较高级别的工具。(c的printf scanf,java的面向...

akingde 135

dubbo底层NIO介绍

转载地址:https://blog.csdn.net/zhang89xiao/article/details/51212892; Java NIO(New IO)是从Java 1.4版本开始引入的一个新的IO API,可以替代标准的Java IO API。  Java NIO提供了与标准IO不同的IO工作方式:   Channels and Buffers(通道和缓冲区):标准的IO基于字节流...

IRhythm的博客 2178

NIO之Path介绍

Path接口是java NIO2的一部分。首次在java 7中引入。Path接口在包下,所以全称是。java中的Path表示文件系统的路径。可以指向文件或文件夹。Path同时也有相对路径和绝对路径之分:绝对路径:表示从文件系统的根路径到文件或是文件夹的路径。相对路径:表示从特定路径下访问指定文件或文件夹的路径。如果使用java.nio.file.Path实例,必须先创建它。通过静态工厂方法创建。/***///创建Path实例。

smart_an的专栏 471

Java NIO的详细介绍

转自朱小厮的博客 前言 现在使用NIO的场景越来越多,很多网上的技术框架或多或少的使用NIO技术,譬如Tomcat,Jetty。学习和掌握NIO技术已经不是一个JAVA攻城狮的加分技能,而是一个必备技能。在前面2篇文章《什么是Zero-Copy?》和《NIO相关基础篇》中我们学习了NIO的相关理论知识,而在本篇中我们一起来学习一下Java NIO的实战知识。全文较长,建议先马后看(记得关注不迷...

艾斯-李的博客 377

BIO、NIO、AIO介绍与区别

BIO、NIO、AIO介绍与区别 阻塞与非阻塞 主要是指访问IO的线程是否会阻塞 线程访问资源,该资源是否准备就绪的一种处理方式。 同步与异步 主要是指数据的请求方式 同步和异步是指访问数据的一种机制 BIO 同步阻塞 IO,Block IO IO 操作时会阻塞线程,并发处理能力低。 我们熟知的 Socket 编程就是 BIO,一个 socket 连接一个处理线程(这个线程负责这个 Socke...

jl935418600的博客 293

BIO、NIO介绍

IO:https://blog.csdn.net/qq_35751014/article/details/104715499 BIO+NIO:https://blog.csdn.net/foolishpichao/article/details/108193606 NIO:https://blog.csdn.net/qq_35751014/article/details/104411347 参考视频:https://www.bilibili.com/video/BV1DJ411m7NR?p=37 .

qq_35599414的博客 257
上一篇: 1. 两数之和
下一篇: NodeJS_入门学习_1
Be_nurturing
博客等级 码龄11年 7粉丝 80原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值