进程间通信的方式及特点,常用的进程间通信方式有几种

  进程间通信的方式及特点,常用的进程间通信方式有几种

  消息队列消息队列可以被认为是一个消息链表,它存储在内核中,进程可以从中读取和写入数据。与管道和FIFO不同,一个进程可以写操作,而不需要另一个进程等待读操作。另一方面,管道和FIFO中的相关进程一旦关闭退出,其中的数据就没有了,但是对于消息队列来说,一个进程将数据写入消息队列后退出,而另一个进程仍然可以打开读取消息。与后面介绍的UNIX域套接字相比,消息队列在速度上优势不大。

  信号量是一个计数器,主要用在多个进程需要访问共享数据的时候。考虑到这种情况,不能让两个进程同时访问相同的数据,所以可以用信号量来实现。

  其主要过程如下:

  检查控制该资源的信号量。

  如果信号幅度大于0,则资源可用,减1,表示当前已被使用。

  如果信号幅度为0,则进程休眠,直到信号幅度大于0。

  也就是实际上是

提供了一个不同进程或者进程的不同线程之间访问同步的手段

  共享内存共享内存允许多个进程共享一个给定的存储区域,速度非常快,因为它们共享一块内存数据。但是,需要提供其他方法来保证共享内存的同步访问,例如,可以使用前面提到的信号量来实现访问同步。

  UNIX域socket UNIX域socket和socket类似,但是效率更高,因为它不需要进行协议处理,比如计算校验和,发送确认消息等。它只是复制数据。

  当然,它只适用于同一台计算机上的进程间通信。

  比如redis服务配置unixsocket启动后,可以通过redis-cli的-s参数指定UNIX域套接字连接redis服务器。

  $ redis-CLI-s/tmp/redis . sock redis/tmp/redis . sock它会比使用网络套接字更快。

  不用说,套接字使用网络进行通信。与前面提到的通讯方式不同,是

能用于不同计算机之间的不同进程间通信

  简要介绍了进程间通信的常用方式,其中我们用了一个管道和命名管道的例子,因为我们可能经常会看到。对于FIFO来说,当引用它的最后一个进程终止时,留在FIFO中的数据也会被删除,但对于消息队列来说却不是这样,消息队列会一直存在,直到它被显示并被系统删除或引导。此外,消息队列与其他方法相比并没有特别的优势。事实上,信号量经常用于共享数据的同步访问。在共享进程之间传递数据是非常高效的,但是系统并不同步访问,所以需要同步数据的访问。Socket是目前应用最广泛的进程间通信方式。

  本文只是简单介绍,实际内容远不止于此。PC最好访问

阅读原文

地址。这篇文章的最新内容是什么,地址,进程间通信方法?

  参考:

  《Unix环境高级编程》

  《unix网络编程卷2:进程间通信》

  《深入Linux内核架构》

  相关阅读:

  必问:进程和线程有什么区别?

  关注微信官方账号【编程明珠】,获取更多Linux/C/C/Python/Go/algorithms/tools等原创技术文章。后台免费获取经典电子书和视频资源。

进程间通信的方式及特点,常用的进程间通信方式有几种