1

2 つのプロセス間の通信に共有メモリ (セマフォ付き) を使用しています: まず、次の呼び出しを使用して共有メモリ オブジェクトを開きます。

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はsyscallであり、アドレス空間操作(MMU)を意味する特権遷移を意味し、カーネルはmemcpy提供されたバッファーから宛先アドレスに呼び出します。基本的には同じことを行います ( を呼び出しますmemcpy) が、2 つの高価な操作 (特権遷移) と安価な操作 (宛先アドレスの検索) を追加します。

read/のwrite方が遅くなる可能性が非常に高いと結論付けることができます。

于 2013-06-12T12:52:58.960 に答える