栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

Java 随笔 IO

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

Java 随笔 IO

0.想找个理由出门逛gai…

关于NIO的底层实现、demo CSDN-方志朋
linux的zero-copy操作 by 公众号- 朱小厮的博客
各种IO的基础讲解 by 公共号-朱小厮的博客
BIO、NIO、AIO的大白话 by CSDN-涂有

java中的AIO、demo by CSDN-茅坤宝骏氹
IO设计模式:Reactor和Proactor对比 by segmentfault-大CC

1. zero-copy

一次IO中用户、内核进程


减少由内核到用户上下文的一次切换

借助偏移减少内核中buffer数据传输的效率(较copy)

减少一次“拷贝”中不必要的1次copy(内存中从内核空间到用户空间之间的上下文切换)
通过操作系统的支持(linux下的sendFile()),可以将文件不透过用户空间,直接传入到套接字
java针对zero-copy的支持即NIO相关API:XxxChannel.transferTo()
2. IO对比
BIO
	每个连接需要创建一条线程以轮询socket
	适合连接数较小
NIO
	non-blocking io
	事件驱动的IO
	由单线程的selector(多路复用器)以间接的轮询socket
	适合多连接、小量数据
AIO
	有说法管他叫 —— NIO 2.0(较NIO多了异步,基于OS内核的支持实现)
	不需要轮询,内核中真正的IO一旦完成,将告知用户进程
	将数据的读写操作放到内核进程中完成,用户进程只做处理
	适合连接数多、数据量大
3. NIO
五种IO模型
IO阻塞的时机
	等待数据准备 (Waiting for the data to be ready)
	将数据从内核拷贝到进程中 (Copying the data from the kernel to the process)
socket阻塞process->socket线程各自recvfrom轮询->通知process
selector阻塞process->selector recvfrom轮询socket线程->通知process->可复用的IO
4. java关于NIO的api
Buffer
	针对用于缓冲数据的数组的一个封装
Selector
	单线程的处理多个channel的连接
Channel
	对比stream来说,channel是双向的(读/写)	
	包括 文件、UDP、TCP的IO
5. AIO
实现方式:
	将来式
		基于多线程实现(用户进程)
	回调
		靠的就一手OS的支持(内核线程)

将来式

回调

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/295299.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号