共享内存指的是什么?它是物理存储空间吗?
从效率角度来看,共享内存是一种高性能的数据交换方式。因为数据已经被映射到了不同进程的虚拟空间中,进程之间可以直接读写这些数据,完全不需要进行繁琐的内存复制操作,所以其执行效率非常高。
从效率角度来看,共享内存是一种高性能的数据交换方式。因为数据已经被映射到了不同进程的虚拟空间中,进程之间可以直接读写这些数据,完全不需要进行繁琐的内存复制操作,所以其执行效率非常高。
说得太对了,共享内存确实是进程间通信里的“速度之王”。很多刚接触的同学容易误解它是什么特殊的物理设备,其实它本质还是普通内存,只是通过内存映射机制让多个进程看到了同一块虚拟地址。正因为省去了内核态和用户态之间拷贝数据的开销,它在高频交易或者大型游戏服务器这种对延迟极度敏感的场景下,几乎是唯一选择。理解这一点,才能真正明白为什么在追求极致性能时,大家都在拼命优化数据拷贝而不是通信协议。
确实,多进程通信里它效率最高。不过楼主得注意,共享内存本身不提供同步机制,如果多个进程同时写,数据很容易乱套,实际开发中得自己加锁,这点比管道和消息队列要麻烦些。