进程间有哪些通信方式

  1. 匿名管理 netstat -nlp |grep 8080 把前一条命令的输出作为后一条命令的输入
  2. 命名管道
    mkfifo test
    echo "this is a pipe" > test//// 写数据
    cat < test // 读数据

单向传输
缺点 :效率低下,a 进程给 b 进程传输数据,只能等待 b 进程取了数据之后 a 进程才能返回。

  1. 消息队列
    例如 a 进程要给 b 进程发送消息,只需要把消息放在对应的消息队列里就行了,b 进程需要的时候再去对应的

缺点 :如果 a 进程发送的数据占的内存比较大,并且两个进程之间的通信特别频繁的话,消息队列模型就不大适合了。因为 a 发送的数据很大的话,意味发送消息(拷贝)这个过程需要花很多时间来读内存

  1. 共享内存
    很好的解决拷贝所消耗的时间
    系统加载一个进程的时候,分配给进程的内存并不是实际物理内存,而是虚拟内存空间
    可以让两个进程各自拿出一块虚拟地址空间来,然后映射到相同的物理内存中,这样,两个进程虽然有着独立的虚拟内存空间,但有一部分却是映射到相同的物理内存,这就完成了内存共享机制了

问题:多进程竞争内存,类似线程安全

  1. 信号量

信号量的本质就是一个计数器,用来实现进程之间的互斥与同步。例如信号量的初始值是 1,然后 a 进程来访问内存1的时候,我们就把信号量的值设为 0,然后进程b 也要来访问内存1的时候,看到信号量的值为 0 就知道已经有进程在访问内存1了,这个时候进程 b 就会访问不了内存1。所以说,信号量也是进程之间的一种通信方式。

  1. Socket

两个相隔几千里的进程能够进行通信吗,能,用得就是socket

All posts

Other pages

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注