1

我使用共享内存(带信号量)在两个进程之间进行通信:拳头,我使用调用打开共享内存对象:

int fd = shm_open("name") [http://linux.die.net/man/3/shm_open]

其次,我使用调用将此共享内存对象映射到我的地址空间:

void* ptr = mmap(..fd..) [http://linux.die.net/man/2/mmap2]

但是,我想将 EPOLL 与共享内存文件描述符一起使用==> 我不再使用 mmap,而是使用 EPOLL 进行监视,然后添加,写入函数以使用 fd(共享内存)直接访问共享内存文件描述符)

我的问题是:与mmap返回的指针上的memcpy相比,直接读写共享内存对象的速度如何?

read(fd, buffer) vs memcpy(des, source, size) //???

希望看到你的回答!谢谢!

4

1 回答 1

1

read是一个系统调用,意味着特权转换,这意味着地址空间操作(MMU),然后内核memcpy将从您提供的缓冲区调用目标地址。它基本上和你做的事情一样(调用memcpy),但增加了 2 个昂贵的操作(特权转换)和一个便宜的操作(查找目标地址)。

我们可以得出结论read/write很可能会变慢。

于 2013-06-12T12:52:58.960 回答