我在内存中有一些数据要通过千兆以太网发送给客户端。
服务器:
unsigned char *fbe_addr = mmap(0, img_size, PROT_READ | PROT_WRITE, MAP_SHARED, mem_fd, img_buf_phys);
int bytes_sent = 0;
int total_sent = 0;
while (total_sent != img_size) {
bytes_sent = write(conn_fd, fbe_addr + total_sent, img_size - total_sent);
total_sent += bytes_sent;
}
客户端:
int bytes_recv = 0;
int total_recv = 0;
for (; total_recv < img_size; ) {
bytes_recv = read(sockfd, recv_buff + total_recv, img_size - total_recv);
total_recv += bytes_recv;
}
通过使用此方法,img_size为65MB,我设法获得了大约4xx MBit / s的吞吐量。但是如果我将从fbe_addr开始的内容存储到临时缓冲区然后将其发送出去,我设法得到5xx Mbit / s。这背后的原因是什么?此外,有没有任何方法以尽可能快的速度发送内存数据,而无需额外调用memcpy?