拷贝桑漫画 ,复制四格漫画
第一次拷贝:将磁盘中的数据拷贝到内核的缓冲区中第二次拷贝:内核将数据处理完,接着拷贝到用户缓冲区中第三次拷贝:此时需要通过socket将数据发送出去,将用户缓冲区中的数据拷贝至内核中socket的缓冲区中第四次拷贝:把内核中socket缓冲区的数据拷贝到网卡的缓冲区中,通过网卡将数据发送出去。
在我们的印象中,内存拷贝是一个比较重的操作,重就代表性能低。所以我们在之前的编程语言中,如果数据较大的值,在进行传参的时候建议传引用,这样会减少内存拷贝带来的性能问题。在赋值的时候也会采用写时拷贝。
减少「数据拷贝」次数:前面提到,传统的文件传输方式会历经4次数据拷贝;但很明显的可以看到:从内核的读缓冲区拷贝到用户的缓冲区和从用户的缓冲区里拷贝到socket的缓冲区」这两步是没有必要的。
4次数据拷贝两次由DMA完成拷贝,另外两次则是由CPU完成拷贝;我们只是搬运一份数据,结果却搬运了4次,过多的数据拷贝无疑会消耗额外的资源,大大降低了系统性能。
但是DMA有其局限性,DMA仅仅能用于设备之间交换数据时进行数据拷贝,但是设备内部的数据拷贝还需要CPU进行,例如CPU需要负责内核空间数据与用户空间数据之间的拷贝(内存内部的拷贝)。
第1话
第2话
第3话