欢迎访问 内存溢出 —— 独立后端与系统工程技术博客

专注于分布式系统、Linux内核、数据库存储与后端工程实践

Linux 命名管道与共享内存:进程间通信(IPC)性能对比

发表于:|最后更新:|分类:Linux与高性能|阅读:503 次

Linux 提供多种 IPC 机制:**命名管道(FIFO)**基于内核缓冲区,适合小消息流式传输;**POSIX 共享内存(shm_open + mmap)**让多个进程映射同一物理页,零拷贝传递大数据,但需自行实现同步(如信号量)。

一、POSIX 共享内存 + 信号量同步示例

c
#include <fcntl.h>
#include <sys/mman.h>
#include <semaphore.h>

typedef struct {
    sem_t lock;
    char  payload[4096];
} SharedBuf;

int fd = shm_open("/ipc_demo", O_CREAT | O_RDWR, 0600);
ftruncate(fd, sizeof(SharedBuf));

SharedBuf *buf = mmap(NULL, sizeof(SharedBuf), PROT_READ | PROT_WRITE, MAP_SHARED, fd, 0);
sem_init(&buf->lock, 1, 1); // pshared=1,跨进程共享

// 写入端
sem_wait(&buf->lock);
strncpy(buf->payload, "hello from writer", sizeof(buf->payload) - 1);
sem_post(&buf->lock);

// 读取端映射同一名字对象后即可零拷贝读取