通讯(一)进程间通讯和线程间通讯

1、进程间通讯程序员

  一、进程间通讯概述:进程间通讯(IPC,Interprocess communication)是一组编程接口,让程序员可以协调不一样的进程,使之能在一个操做系统里同时运行,并相互传递、交换信息。这使得一个程序可以在同一时间里处理许多用户的要求。由于即便只有一个用户发出要求,也可能致使一个操做系统中多个进程的运行,进程之间必须互相通话。IPC接口就提供了这种可能性。每一个IPC方法均有它本身的优势和局限性,通常,对于单个程序而言使用全部的IPC方法是不常见的。编程

  二、进程间通讯的目的:数据结构

    1)数据传输:一个进程须要将它的数据发送给另外一个进程,发送的数据量在一个字节到几兆字节之间。
    2)共享数据:多个进程想要操做共享数据,一个进程对共享数据的修改,别的进程应该马上看到。
    3)通知事件:一个进程须要向另外一个或一组进程发送消息,通知它(它们)发生了某种事件(如进程终止时要通知 父进程)。
    4)资源共享:多个进程之间共享一样的资源。为了做到这一点,须要 内核提供锁和同步机制。
    5)进程控制:有些进程但愿彻底控制另外一个进程的执行(如Debug进程),此时控制进程但愿可以拦截另外一个进程的全部陷入和异常,并可以及时知道它的状态改变。
 
   三、进程间通讯的方式:进程间的通讯则不一样,它的数据空间的独立性决定了它的通讯相对比较复杂,须要经过操做系统。通讯机制主要有: 管道、有名管道、消息队列、信号量、共享空间、信号、套接字(socket)。   

 

  (1)管道:它传递数据是单向性的,只能从一方流向另外一方,也就是一种半双工的通讯方式;只用于有亲缘关系的进程间的通讯,亲缘关系也就是 父子进程或兄弟进程;没有名字而且大小受限,传输的是无格式的流,因此两进程通 信时必须约定好数据通讯的格式。管道它就像一个特殊的文件,但这个文件之存在于内存中,在建立管道时,系统为管道分配了一个页面做为数据缓冲区,进程对这个数据缓冲区进行读写,以此来完成通讯。其中一个进 程只能读一个只能写,因此叫半双工通讯,为何一个只能读一个只能写呢?由于写进程是在缓冲区的末尾写入,读进程是在缓冲区的头部读取,他们各自 的数据结构不一样,因此功能不一样。多线程

  (2)有名管道 (named pipe) : 有名管道也是半双工的通讯方式,可是它容许无亲缘关系进程间的通讯。socket

    实例:http://blog.csdn.net/yl2isoft/article/details/20228279spa

    代码下载:http://files.cnblogs.com/files/qtiger/NamedPipeExample.zip操作系统

  (3)高级管道(popen):将另外一个程序当作一个新的进程在当前程序进程中启动,则它算是当前程序的子进程,这种方式咱们成为高级管道方式。.net

  (4)消息队列( message queue ) : 消息队列是由消息的链表,存放在内核中并由消息队列标识符标识。消息队列克服了信号传递信息少、管道只能承载无格式字节流以及缓冲区大小受限等缺点。线程

  (5)信号量( semophore ) : 信号量是一个计数器,能够用来控制多个进程对共享资源的访问。它常做为一种锁机制,防止某进程正在访问共享资源时,其余进程也访问该资源。所以,主要做为进程间以及同一进程内不一样线程之间的同步手段。设计

  (6)信号 ( sinal ) : 信号是一种比较复杂的通讯方式,用于通知接收进程某个事件已经发生。

  (7)共享内存( shared memory ) :共享内存就是映射一段能被其余进程所访问的内存,这段共享内存由一个进程建立,但多个进程均可以访问。共享内存是最快的 IPC 方式,它是针对其余进程间通讯方式运行效率低而专门设计的。它每每与其余通讯机制,如信号两,配合使用,来实现进程间的同步和通讯。

  (8)套接字( socket ) : 套接字也是一种进程间通讯机制,与其余通讯机制不一样的是,它可用于不一样机器间的进程通讯。

2、线程间通讯

  一、线程间通讯的概况

    因为多线程共享地址空间和数据空间,因此多个线程间的通讯是一个线程的数据能够直接提供给其余线程使用,而没必要经过操做系统。因此线程间通讯和同步的方式主要有锁机制(包括互斥锁、条件变量、读写锁)、信号机制(Signal)、信号量机制(Semaphore)

相关文章
相关标签/搜索