进程的数据空间是独立的,私有的,不能相互访问,但是在某些情况下进程之间需要通信来实现某功能或交换数据,包括:

1)数据传输:一个进程需要将它的数据发送给另一个进程。

2)共享数据:多个进程想要操作共享数据,一个进程对共享数据的修改,别的进程应该立刻看到。

3)通知事件:一个进程需要向另一个或一组进程发送消息,通知它(它们)发生了某种事件(如通知进程退出)。

4)进程控制:一个进程希望控制另一个进程的运行。

一、进程通信

进程通信的方式大概分为六种。

1)管道:包括无名管道(pipe)及命名管道(named pipe),无名管道可用于具有父进程和子进程之间的通信。命名管道克服了管道没有名字的限制,因此,除具有管道所具有的功能外,它还允许无亲缘关系进程间的通信。

2)消息队列(message):进程可以向队列中添加消息,其它的进程则可以读取队列中的消息。

3)信号(signal):信号用于通知其它进程有某种事件发生。

4)共享内存(shared memory):多个进程可以访问同一块内存空间。

5)信号量(semaphore):也叫信号灯,用于进程之间对共享资源进行加锁。

6)套接字(socket):可用于不同计算机之间的进程间通信。

二、应用经验

1)管道和消息队列太过时了,实在没什么应用价值,了解概念就行。

2)socket可以用于不同系统之间的进程通信,完全可以代替只能在同一系统中进程之间通信的管道和消息队列。

3)信号的应用场景非常多,主要用于进程的控制,例如通知正在运行中的后台服务程序退出。

4)同一系统中,进程之间采用共享内存交换数据的效率是最高的,但是,共享内存没有加锁的机制,所以经常与信号灯结合一起来使用,在高性能的网络服务端程序中,可以用共享内存作为的数据缓存(cache)。

三、版权声明

C语言技术网原创文章,转载请说明文章的来源、作者和原文的链接。
来源:C语言技术网(www.freecplus.net
作者:码农有道