对第三次拷贝的疑问
来源:2-9 Buffer的原理和使用场景-面试题解读(1)

慕粉4331336
2021-03-06
对于第三次拷贝,拷贝到线程中有疑问,多个线程不是共享进程内存资源资源么,我理解的是线程一般都使用引用的方式来操作内存,这个时候应该是不会拷贝资源到线程的。这里的拷贝到线程具体指的是什么,求老仙解答
另外就是Device的数据通过DMA到达内核空间,不经过CPU,这边中间写了Channel,是不是代表Java NIO中的Channel也是这么个类似的含义。
还有关于Device从设备到内核空间到用户空间这个流程,是不是内存映射mmap系统调用可以直接将设备的文件映射到用户空间
写回答
1回答
-
网络数据进入操作系统后,在内核空间。这个时候,线程是访问不到的。需要拷贝。
数据在网卡,os也是访问不到的,需要拷贝到内核空间。
从内核空间拷贝到用户空间的数据,是在buffer中的,二进制。需要还原,所以相当于再次拷贝。
当然,nio提供了类似引用传递的能力。directmapping,将内核的数据作为buffer直接给线程用。不过,这个能力需要手动调用。
032021-03-08