Linux给我们提供了丰富的内部进程通信机制,包括共享内存、内存映射文档、先入先出(FIFO)、接口(sockets)连同多种用于同步的标识。在本文中,我们主要讨论一下共享内存和内存映射文档技术。
一般来说,内部进程通信(interprocess communication)也就是IPC,是指两个或两个以上进程连同两个或两个以上线程之间进行通信联系。每个IPC机制都有不同的强项或弱点,但是没有一个IPC机制包含内建的同步方法。因此程式员不但需要自己在程式中实现同步,而且还需要为了利用IPC机制而自己研发通信协议。
共享内存
使用共享内存和使用malloc来分配内存区域很相似。使用共享内存的方法是:
1.对一个进程/线程使用shmget分配内存区域。
2.使用shmat放置一个或多个进程/线程在共享内存中,您也能够用shmctl来获取信息或控制共享区域。
3.使用shmdt从共享区域中分离。
4.使用shmctl解除分配空间
下面是个例子:
|
共享内存是Linux中最快速的IPC方法。他也是个双向过程,共享区域内的任何进程都能够读写内存。这个机制的不利方面是其同步和协议都不受程式员控制,您必须确保将句柄传递给了子进程和线程。
内存映射文档
内存映射文档不但仅用于IPC,在其他进程中他也有很大作用。假如您需要将一个分配的缓冲区初始化为零,只要记住/dev/zero 。您也能够通过将文档映射到内存中以提高其性能。他使您能够像读写字符串相同读写文档。下面是个例子:
|
利用内存映射来处理IPC的好处是在整个过程中您无需处理句柄:只要打开文档并把他映射在合适的位置就行了。您能够在两个不相关的进程间使用内存映射文档。
使用内存映射的缺点是速度不如共享内存快。假如凑巧文档很大,所需要的虚拟内存就会很大,这样会造成整体性能下降。
文章整理:西部数码--专业提供域名注册、虚拟主机服务
http://www.west263.com
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!



