IPC的共享内存和线程的共享内存有什么区别?

6

让我们使用像shmget()这样的POSIX共享内存 - 这是一种协调进程间通信的常见调用。调用shmget()并协调共享内存段上的通信与Linux在单个进程中实现线程之间的共享内存和同步有何不同。它们中的哪一个更轻量级?

2个回答

4

SHM 是用于多进程间的 IPC。在现代操作系统中,每个进程无法看到其他进程的内存空间。使用共同的 key 通过 shmget() 获取共享内存,并使用 shmat() 将共享内存页面映射到每个进程内的本地内存地址。由于每个进程的内存使用和加载的共享库不同,映射的共享内存地址可能会有所不同。并且 SHM 的键和大小在这些进程中预定义和固定。

对于线程内存,我们可能不称其为共享内存,因为线程都在单个进程的内存空间寻址。他们可以看到并在同一进程空间中读写。


2

实际上,Linux 没有操作系统级别的线程。一个进程只有一个线程。因此,当您使用 pthreads 时,实际上是使用多个共享所有内存(除了特定于线程的存储区域)的进程。然而,在其他 UNIX 系统上(例如 OSX),情况可能不同。但是,您可以通过创建一个简单的 pthreads 进程并将其后台运行,然后在 shell 提示符下键入 ps 来自己查看。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接