1、传统IO底层发生了什么?为什么OS层面是相当昂贵的操作?

- JVM发送read()系统调用
- OS进行上下文切换到内核态,从socket buffer中读取数据。
- OS内核拷贝数据到user buffer,然后进行上下文切换,回到用户态,read()方法返回。
- JVM进程继续执行代码逻辑,然后发送write()系统调用。
- OS进行上下文切换到内核态,将user buffer的数据拷贝到socket buffer。
- OS进行上下文切换到用户态,write方法返回,JVM继续执行代码逻辑。
可以看到,一个简单的传统IO操作,涉及了4次上下文切换和2次数据拷贝,所以说这个效率是相当低下的。如果在并发要求极高的中间件系统中,这样的效率是无法容忍的。
2、JDK是如何优化传统的IO操作,实现zero-copy效果的?
zero-copy的意思是不会将数据从内核态拷贝到用户态,而非不进行数据拷贝。

之所以内核态还会发生数据拷贝,是因为DMA(Direct Memory Access)希望访问的是一段连续的内存空间。
3、MMAP
zero-copy,因为

本文探讨了Java中的IO优化技术,包括零拷贝的概念,JDK如何通过减少上下文切换和数据拷贝提高效率。讲解了mmap技术以及ByteBuffer的三种实现,强调了DirectByteBuffer和MappedByteBuffer在性能与管理上的权衡。最后总结了高效IO技术的利弊,并推荐了一篇高并发编程的学习资源。
最低0.47元/天 解锁文章
1009





