首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往
您找到你想要的搜索结果了吗?
是的
没有找到

到底层看NIO的零拷贝

我们大致分析一下,那些数据拷贝是多余的: 磁盘文件拷贝内核缓冲区是必须的不能省略,因为这个数据总归要读取出来的!...内核空间拷贝用户空间,如果我们不准备对数据做修改的话,好像没有必要呀,直接拷贝Socket缓冲区不就可以了! Socket网卡,好像也有点多余,为什么这么说呢?...调用sendfile函数将内核空间的数据直接拷贝Socket缓冲区! 上下文从内核态切换至用户态 Socket缓冲区通过DMA引擎,将数据拷贝网卡,通过底层协议栈发送到对端!...这个优化不可谓不狠,上下文切换次数变为两次,数据拷贝变为两次,这基本符合了我们上面的优化要求,但是我们还是会发现,从内核空间Socket缓冲区,然后从内核缓冲区网卡似乎也有点鸡肋,所以,Linux2.4...我们在创建这个虚引用的时候传入了一个队列,在这个对象被回收的时候,被引用的对象会进入这个回调!

24840

到底层看NIO的零拷贝

我们大致分析一下,那些数据拷贝是多余的: 磁盘文件拷贝内核缓冲区是必须的不能省略,因为这个数据总归要读取出来的!...内核空间拷贝用户空间,如果我们不准备对数据做修改的话,好像没有必要呀,直接拷贝Socket缓冲区不就可以了! Socket网卡,好像也有点多余,为什么这么说呢?...调用sendfile函数将内核空间的数据直接拷贝Socket缓冲区! 上下文从内核态切换至用户态 Socket缓冲区通过DMA引擎,将数据拷贝网卡,通过底层协议栈发送到对端!...这个优化不可谓不狠,上下文切换次数变为两次,数据拷贝变为两次,这基本符合了我们上面的优化要求,但是我们还是会发现,从内核空间Socket缓冲区,然后从内核缓冲区网卡似乎也有点鸡肋,所以,Linux2.4...我们在创建这个虚引用的时候传入了一个队列,在这个对象被回收的时候,被引用的对象会进入这个回调!

39700
领券