请稍等 ...
×

采纳答案成功!

向帮助你的同学说点啥吧!感谢那些助人为乐的人

对第三次拷贝的疑问

图片描述
对于第三次拷贝,拷贝到线程中有疑问,多个线程不是共享进程内存资源资源么,我理解的是线程一般都使用引用的方式来操作内存,这个时候应该是不会拷贝资源到线程的。这里的拷贝到线程具体指的是什么,求老仙解答
另外就是Device的数据通过DMA到达内核空间,不经过CPU,这边中间写了Channel,是不是代表Java NIO中的Channel也是这么个类似的含义。
还有关于Device从设备到内核空间到用户空间这个流程,是不是内存映射mmap系统调用可以直接将设备的文件映射到用户空间

正在回答

1回答

网络数据进入操作系统后,在内核空间。这个时候,线程是访问不到的。需要拷贝。

数据在网卡,os也是访问不到的,需要拷贝到内核空间。

从内核空间拷贝到用户空间的数据,是在buffer中的,二进制。需要还原,所以相当于再次拷贝。

当然,nio提供了类似引用传递的能力。directmapping,将内核的数据作为buffer直接给线程用。不过,这个能力需要手动调用。

0 回复 有任何疑惑可以回复我~
  • 提问者 慕粉4331336 #1
    好的,明白了,谢谢老仙,另外有个疑问是关于mmap的,mmap内存映射文件应该是用户内存直接到Device的吧,这样是不是就打破了两次拷贝过程。只用1次拷贝了(不计算数据在线程中由二进制还原的这次拷贝)
    回复 有任何疑惑可以回复我~ 2021-03-07 23:51:03
  • 求老仙 回复 提问者 慕粉4331336 #2
    不是,mmap是把内核空间引用给用户空间用。比如一个文件,读取到内核空间之后,不再拷贝到用户空间了。
    回复 有任何疑惑可以回复我~ 2021-03-08 00:09:27
  • 提问者 慕粉4331336 #3
    非常感谢!
    回复 有任何疑惑可以回复我~ 2021-03-08 11:17:49

相似问题

登录后可查看更多问答,登录/注册

问题已解决,确定采纳
还有疑问,暂不采纳
意见反馈 帮助中心 APP下载
官方微信