我们都知道,互联网的世界其实就是数据的世界,无论你是在微信上聊天,在玩王者荣耀,还是逛淘宝,看小姐姐直播,背后其实都是数据的传输 。
文章插图
相信大部分学过计算机操作系统的程序员都知道,假如我们的数据存放在计算机的文件上(数据库实际上也是存放在文件上),要把文件上的内容拷贝给用户,需要经过多少次复制呢?
【Linux操作系统中的零拷贝技术,是怎么一回事】首先,我们需要把内容从文件中拷贝到我们的应用中,虽然这听起来只有一次拷贝,实际上操作系统会进行两次拷贝,首先会先把文件拷贝到操作系统内核,然后再从操作系统内核上拷贝到应用当中 。同理,我们把内容拷贝到Socket传输给用户的过程也是一样的,需要先拷贝给操作系统内核,再拷贝给对应的Socket 。一个简单的功能,竟然要经过4次拷贝 。
那么如何优化这么一个过程呢?linux有一个非常牛的技术,叫做零拷贝,那么在JAVA中如何实现呢?我发现很多Java程序员,虽然说是精通Java更多的是精通JavaWeb 。其实Java也是非常博大精深的,Java的NIO其实已经帮我们解决了这个问题 。
在Java NIO中,我们可以通过FileChannel.map,可以越过内核态,直接从文件拷贝数据到应用当中,同样,可以把越过内核态,直接把数据从应用中拷贝到Socket中发送给用户 。这样子,我们的系统调用,就变成了文件到应用到Socket,只要进行2次拷贝即可 。
同时,我们Java NIO还提供给我们另外一个方法,可以不用经过应用,直接从文件中拷贝到Socket中,这就是FileChannel.transferTo 。它会把数据从文件拷贝到内核中,然后从内核直接把数据再次拷贝给接收的Socket发送给用户 。
总结好了,这就是Java当中的零拷贝技术了 。JavaNIO,在程序员面试中也是经常出现的,如果你有兴趣,欢迎关注我,我们一起学习,共同进步 。同名公众号(沙茶敏碎碎念)
推荐阅读
- LINUX下DNS配置文件介绍
- Linux性能实时监测工具 Netdata
- 详解3种区别Linux服务器是物理机或者虚拟机的方法
- Linux :磁盘分区、挂载知多少?
- 南方礼仪中的茶俗及其创新
- 由ibm公司研制开发的操作系统 ibm公司的兴衰史案例答案
- 浙江省|网友建议浙江两所高校合并“升本”,其中的一所学校回应了!
- 冲泡普洱茶过程中的绿茶思维
- 如何理解茶道茶艺中的神 美 质 匀 巧
- 在生活中的几种茶中哪种最难喝