采纳答案成功!
向帮助你的同学说点啥吧!感谢那些助人为乐的人
对于第三次拷贝,拷贝到线程中有疑问,多个线程不是共享进程内存资源资源么,我理解的是线程一般都使用引用的方式来操作内存,这个时候应该是不会拷贝资源到线程的。这里的拷贝到线程具体指的是什么,求老仙解答 另外就是Device的数据通过DMA到达内核空间,不经过CPU,这边中间写了Channel,是不是代表Java NIO中的Channel也是这么个类似的含义。 还有关于Device从设备到内核空间到用户空间这个流程,是不是内存映射mmap系统调用可以直接将设备的文件映射到用户空间
网络数据进入操作系统后,在内核空间。这个时候,线程是访问不到的。需要拷贝。
数据在网卡,os也是访问不到的,需要拷贝到内核空间。
从内核空间拷贝到用户空间的数据,是在buffer中的,二进制。需要还原,所以相当于再次拷贝。
当然,nio提供了类似引用传递的能力。directmapping,将内核的数据作为buffer直接给线程用。不过,这个能力需要手动调用。
好的,明白了,谢谢老仙,另外有个疑问是关于mmap的,mmap内存映射文件应该是用户内存直接到Device的吧,这样是不是就打破了两次拷贝过程。只用1次拷贝了(不计算数据在线程中由二进制还原的这次拷贝)
不是,mmap是把内核空间引用给用户空间用。比如一个文件,读取到内核空间之后,不再拷贝到用户空间了。
非常感谢!
登录后可查看更多问答,登录/注册
深度剖析大厂面试高频真题,让你秒变offer收割机
1.5k 6
1.1k 11
1.1k 10
809 10
894 8