Copy*2的问题
来源:2-9 Buffer的原理和使用场景-面试题解读(1)

厦客
2021-05-24
老师您好,I/O成本这里,Copy2是从网卡到内核空间,然后从内核空间到用户空间缓冲区吗?
如果是这样的话,Channel到Buffer中间的那个Copy做了什么?
如果不是的话,Channel到Buffer中间的那个Copy是从内核空间到用户空间缓冲区的话,那前面的Copy2具体是做了什么?
写回答
1回答
-
Copy*2你的理解没问题。 Channel是一个抽象的封装,连接两个Buffer, 是Java的内部实现。 Java使用Native Interface读取的数据(文件数据、网络数据等等),都要放入Buffer,然后再到Channel, 最后到用户的Buffer。Channel的设计目标就是高效,且强制规范用户必须使用Buffer。
Copy*2是理论值,网卡->内核->用户空间(实际往往会多于这个值,比如网卡->内核->JVM 的Buffer -> Channel -> 用户的Buffer)。DirectMemory可以减少一次拷贝。
222021-09-03
相似问题