POSIX shared memory - 有多少份内存
POSIX shared memory - How many copies of memory are there
情况:
如果进程 a 和 b 各自使用 mmap()
创建共享内存映射,使用相同的共享内存对象 /shm-a
作为备份文件。
我的猜测:
我本来以为内存只有1份,进程write/read上。
不过后来我觉得其实有3个副本吧?每个进程有1个副本,由mmap()
创建,第3个副本是共享内存对象,用于进程间同步,但我不确定。
问题是:
- 那么内存有多少份呢? 1 或 n+1(其中 n 是进程数)
- 如果是n+1,这不是一种内存浪费吗?进程直接通过其
fd
read/write 到共享内存对象是否合适?
Then how many copy of memory there are? 1 or n+1 (where n is process count)
共享内存只有一份。
相同的物理内存被映射到不同的进程中。但它可能映射到不同个地址。
And is it proper for process to read/write to the shared memory object via its fd directly?
是的。这实际上就是共享内存的目的。一个进程写入共享内存的内容可以被另一个进程读取。这是一种非常快速的 IPC 形式。但是你必须小心使用它。特别是,您需要担心并发访问和共享内存中的共享指针。
情况:
如果进程 a 和 b 各自使用 mmap()
创建共享内存映射,使用相同的共享内存对象 /shm-a
作为备份文件。
我的猜测:
我本来以为内存只有1份,进程write/read上。
不过后来我觉得其实有3个副本吧?每个进程有1个副本,由mmap()
创建,第3个副本是共享内存对象,用于进程间同步,但我不确定。
问题是:
- 那么内存有多少份呢? 1 或 n+1(其中 n 是进程数)
- 如果是n+1,这不是一种内存浪费吗?进程直接通过其
fd
read/write 到共享内存对象是否合适?
Then how many copy of memory there are? 1 or n+1 (where n is process count)
共享内存只有一份。
相同的物理内存被映射到不同的进程中。但它可能映射到不同个地址。
And is it proper for process to read/write to the shared memory object via its fd directly?
是的。这实际上就是共享内存的目的。一个进程写入共享内存的内容可以被另一个进程读取。这是一种非常快速的 IPC 形式。但是你必须小心使用它。特别是,您需要担心并发访问和共享内存中的共享指针。