Java Nio 零拷贝

传统的IO处理方式


上下文切换包括:用户空间(User space),内核空间(Kemel space)
首先,当读取一个硬盘上的文件时,上下文会从用户空间切换到内核空间,由内核空间以DMA(Direct Memory Access)直接内存访问的方式将数据从硬盘(Hardware)复制到内核缓冲区,紧接着将内核缓冲区中的数据复制到用户缓冲区,上下文切换回用户空间。如果有逻辑处理,在逻辑执行完毕,会将用户缓冲区的数据再复制回内核缓冲区,上下文切换到内核空间,然后再将数据从内核缓冲区复制到IO通道(Socket)缓冲区,再写到目的地,发送完毕后上下文再次切换回用户空间。整个过程发生了4次上下文切换




最佳的NIO处理方式 linux2.4版本后操作系统支持的零拷贝机制


上下文切换包括:用户空间(User space),内核空间(Kemel space)
首先,当读取一个硬盘上的文件时,上下文会从用户空间切换到内核空间,由内核空间以DMA(Direct Memory Access)直接内存访问的方式将数据从硬盘复制到内核缓冲区,然后只将文件描述符(不包括文件数据)的信息复制到IO通道(Socket)缓冲区中,文件描述符中包含两方面信息,一、文件在内核缓冲区中内存地址 二、文件长度。最后,通过gathering同时从内核缓冲区和Socket缓冲区将数据写到目的地。将上下文切换回用户空间。整个过程发生2次上下文切换


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值