加入收藏 | 设为首页 | 会员中心 | 我要投稿 江门站长网 (https://www.0750zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 站长资讯 > 动态 > 正文

带你了解JavaScript 数组迭代方法

发布时间:2021-02-06 17:12:22 所属栏目:动态 来源:互联网
导读:artner表示,简化大数据平台是几乎所有分析软件供应商的主要目标。 这主要是为了满足Gartner所说的公民分析家的需求,其数量预计将比正式合格的数据科学家快400%。 因此,如果您打算启动分析解决方案并希望确保将其迅速采用,则需要考虑用户界面(UI)的大量设

artner表示,简化大数据平台是几乎所有分析软件供应商的主要目标。 这主要是为了满足Gartner所说的"公民分析家"的需求,其数量预计将比正式合格的数据科学家快400%。

因此,如果您打算启动分析解决方案并希望确保将其迅速采用,则需要考虑用户界面(UI)的大量设计工作,并确保它提供了最佳的解决方案。 用户体验(UX)。 您的最终用户应该毫不费力地找到体验,从而使他们能够以他们认为直观的方式与数据进行交互。
 

  • 1)发出sendfile系统调用,导致用户空间到内核空间的上下文切换。通过DMA引擎将磁盘文件中的内容复制到内核空间缓冲区
  • 2)这里没把数据复制到socket缓冲区;取而代之的是,相应的描述符信息被复制到socket缓冲区。该描述符包含了两种的信息:A)内核缓冲区的内存地址、B)内核缓冲区的偏移量
  • 3)sendfile系统调用返回,导致内核空间到用户空间的上下文切换。DMA根据socket缓冲区的描述符提供的地址和偏移量直接将内核缓冲区中的数据复制到网卡

「带有DMA收集拷贝功能的sendfile实现的I/O使用了2次用户空间与内核空间的上下文切换,以及2次数据的拷贝,而且这2次的数据拷贝都是非CPU拷贝。这样一来我们就实现了最理想的零拷贝I/O传输了,不需要任何一次的CPU拷贝,以及最少的上下文切换」

java提供的零拷贝方式

  • java NIO的零拷贝实现是基于mmap+write方式
  • FileChannel的map方法产生的MappedByteBuffer FileChannel提供了map()方法,该方法可以在一个打开的文件和MappedByteBuffer之间建立一个虚拟内存映射,MappedByteBuffer继承于ByteBuffer;该缓冲器的内存是一个文件的内存映射区域。map方法底层是通过mmap实现的,因此将文件内存从磁盘读取到内核缓冲区后,用户空间和内核空间共享该缓冲区。用法如下
  • 1)发出sendfile系统调用,导致用户空间到内核空间的上下文切换,然后通过DMA引擎将磁盘文件中的内容复制到内核空间缓冲区中,接着再将数据从内核空间缓冲区复制到socket相关的缓冲区
  • 2)sendfile系统调用返回,导致内核空间到用户空间的上下文切换。DMA异步将内核空间socket缓冲区中的数据传递到网卡

「通过sendfile实现的零拷贝I/O使用了2次用户空间与内核空间的上下文切换,以及3次数据的拷贝。其中3次数据拷贝中包括了2次DMA拷贝和1次CPU拷贝」

带有DMA收集拷贝功能的sendfile实现的零拷贝

从Linux 2.4版本开始,操作系统提供scatter和gather的SG-DMA方式,直接从内核空间缓冲区中将数据读取到网卡,无需将内核空间缓冲区的数据再复制一份到socket缓冲区
 

  • 1)发出mmap系统调用,导致用户空间到内核空间的上下文切换。然后通过DMA引擎将磁盘文件中的数据复制到内核空间缓冲区
  • 2)mmap系统调用返回,导致内核空间到用户空间的上下文切换
  • 3)这里不需要将数据从内核空间复制到用户空间,因为用户空间和内核空间共享了这个缓冲区
  • 4)发出write系统调用,导致用户空间到内核空间的上下文切换。将数据从内核空间缓冲区复制到内核空间socket缓冲区;write系统调用返回,导致内核空间到用户空间的上下文切换
  • 5)异步,DMA引擎将socket缓冲区中的数据copy到网卡

「通过mmap实现的零拷贝I/O进行了4次用户空间与内核空间的上下文切换,以及3次数据拷贝;其中3次数据拷贝中包括了2次DMA拷贝和1次CPU拷贝」

sendfile实现的零拷贝


(编辑:江门站长网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!