高级进程间通信:System V共享内存详解
1. 高性能数据库锁定
文件锁(通过 fcntl 和 lockf 系统调用实现),即使有强制锁定机制,也不适合高性能数据库。原因在于操作锁的开销太大,并且难以实现复杂的死锁检测和纠正算法。不过通常情况下,大型数据库系统会在自己的进程中运行,充当数据库文件的守门人。锁可以轻松地保存在数据库进程的地址空间或多个数据库进程共享的内存中,这样就无需使用系统调用来管理锁。
2. 共享内存概述
进程内的线程会共享所有静态数据,包括全局数据和函数内部的静态数据。而进程则拥有完全独立的内存,即便执行 fork 操作而不执行 exec ,子进程也会获得父进程地址空间的副本。
使用共享内存可以让不同的进程共享部分内存。和线程一样,进程通常需要使用互斥锁或信号量来协调对共享内存的访问。共享内存有System V和POSIX两种版本,消息和信号量也是如此。对于这两种机制,每个进程都会“打开”一个共享内存段并获取指向该内存的指针,之后就可以使用普通的C或C++运算符来操作该内存,无需使用系统调用。通常,每个进程的指针值不同,仅在该进程内部有意义,但底层的内存是相同的。下面先介绍System V共享内存。
3. System V共享内存
3.1 System V共享内存系统调用
System V共享内存涉及以下几个系统调用:
- shmget :用于获取共享内存段。
超级会员免费看
订阅专栏 解锁全文
860

被折叠的 条评论
为什么被折叠?



