Java 随笔 IO

21 篇文章 0 订阅

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的支持(内核线程)

将来式
请添加图片描述

回调
请添加图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

肯尼思布赖恩埃德蒙

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值