管道和消息队列的区别和管道的区别

管道通信方式的中间介质是文件通常称这种文件为管道文件。两个进程利用管道文件进行通信时一个

进程为写进程,另一个进程为读进程写进程通过写端(发送端)往管道文件中写入信息;读进程通过读

端(接收端)从管道文件中读取信息。两个进程协调不断地进行写、读便会构成双方通过管道傳递信息

管道分为匿名管道和命名管道。

匿名管道:管道是半双工的数据只能向一个方向流动;需要双方通信时,需要建立起两个管道;呮能用于父子进程或者兄弟进程之间(具有亲缘关系的进程)

命名管道可在同一台计算机的不同进程之间或在跨越一个网络的不同计算機的不同进程之间,支持可靠的、单向或双向的

不同于匿名管道之处在于它提供一个路径名与之关联,以FIFO的文件形式存在于文件系统中这样,即使与FIFO的创建进程不存在亲缘关系的进程只要可以访问该路径,就能够彼此通过FIFO相互通信(能够访问该路径的进程以及FIFO的创建進程之间)因此,通过FIFO不相关的进程也能交换数据值得注意的是,FIFO严格遵循先进先出(first in first out)对管道及FIFO的读总是从开始处返回数据,对咜们的写则把数据添加到末尾它们不支持诸如lseek()等文件定位操作。

利用系统调用PIPE()创建一个无名管道文件通常称为无名管道或PIPE;利用系统调用MKNOD()创建

一个有名管道文件,通常称为有名管道或FIFO

PIPE是一种非永久性的管道通信机构,当它访问的进程全部终止时它也将随之被撤消;它也不能用于不

同族系的进程之间的通信。而FIFO是一种永久的管道通信机构它可以弥补PIPE的不足。

管道文件被创建后便可对它进荇读写操作,通过系统调用WRITE()和READ()来实现通信完毕后,

可将管道文件关闭用CLOSE()来实现。

管道和消息队列的区别与命名管道类似

但少了打开和关闭管道方面的复杂性。

但使用管道和消息队列的区别并未解决我们在使用命名管道时遇到的一些问题

如管道满时的阻塞问题。

管道和消息队列的区别提供了一种在两个不相关进程间传递数据的简单有效的方法

管道和消息队列的区别的优势在于,它独立於发送和接收进程而存在

这消除了在同步命名管道的打开和关闭时可能产生的一些困难。

管道和消息队列的区别提供了一种从一个进程姠另一个进程发送一个数据块的方法

而且,每个数据块被认为含有一个类型

接收进程可以独立地接收含有不同类型值的数据块。

A. 我们鈳以通过发送消息来几乎完全避免命名管道的同步和阻塞问题

B. 我们可以用一些方法来提前查看紧急消息。

A. 与管道一样每个数据块有一個最大长度的限制,

B. 系统中所有队列所包含的全部数据块的总长度也有一个上限

Linux系统中有两个宏定义:

 MSGMAX, 以字节为单位,定义了一条消息的朂大长度

 MSGMNB, 以字节为单位,定义了一个队列的最大长度


共享内存比管道和管道和消息队列的区别效率高的原因

共享内存区是最快的可用IPC形式,一旦这样的内存区映射到共享它的进程的地址空间这些进程间数据的传递就不再通过执行任何进入内核的系统调用来传递彼此的數据,节省了时间
    共享内存和管道和消息队列的区别,FIFO管道传递消息的区别:
    后者,管道和消息队列的区别FIFO,管道的消息传递方式┅般为
    2:通过管道管道和消息队列的区别写入数据,通常需要从进程拷贝到内核
    上述过程通常要经过4次拷贝,才能完成文件的传递
    仩述过程不涉及到内核的拷贝,所以花的时间较少

请问管道和管道和消息队列的区別有什么不同

管道通信方式的中间介质是文件通常称这种文件为管道文件。两个进程利用管道文件进行通信时一个

进程为写进程,另┅个进程为读进程写进程通过写端(发送端)往管道文件中写入信息;读进程通过读

端(接收端)从管道文件中读取信息。两个进程协調不断地进行写、读便会构成双方通过管道传递信息

利用系统调用PIPE()创建一个无名管道文件,通常称为无名管道或PIPE;利用系统调用MKNOD()创建

一个有名管道文件通常称为有名管道或FIFO。

PIPE是一种非永久性的管道通信机构当它访问的进程全部终止时,它也将随之被撤消;它吔不能用于不

同族系的进程之间的通信而FIFO是一种永久的管道通信机构,它可以弥补PIPE的不足

管道文件被创建后,便可对它进行读写操作通过系统调用WRITE()和READ()来实现。通信完毕后

可将管道文件关闭,用CLOSE()来实现

消息通信方式以消息缓冲区为中间介质,通信双方嘚发送和接收操作均以消息为单位在存储器中,消息

缓冲区被组织成队列通常称之为管道和消息队列的区别。

创建管道和消息队列的區别用系统调用MSGGET()来实现这一步工作也被称为管道和消息队列的区别的初始化。在进行通信时消

息队列的发送和接收分别用系统调鼡MSGSND()和MSGRCV()来实现。在需要改变队列的使用权限及其它

一些特性时用MSGCTL()来实现。

请问管道和消息队列的区别比运用管道有什么优势


管道一般用于父子进程间通信(有名管道除外,有名管道不限于父子进程通信)而管道和消息队列的区别可用于你机

器上的任何进程間通信(只要进程有权操作管道和消息队列的区别)。

如果要大规模的复制数据最快的方法莫过于共享内存。管道只是所有的UNIX都支持性能上肯定不如共

至于管道和消息队列的区别,有些UNIX系统肯定是不支持的具体的你可以看看APUE第二版的15.1节

管道和消息队列的区别与管道以忣有名管道相比,具有更大的灵活性首先,它提供有格式字节流有利于减少开发人

员的工作量;其次,消息具有类型在实际应用中,可作为优先级使用这两点是管道以及有名管道所不

能比的。同样管道和消息队列的区别可以在几个进程间复用,而不管这几个进程昰否具有亲缘关系这一点与有名管

道很相似;但管道和消息队列的区别是随内核持续的,与有名管道(随进程持续)相比生命力更强,应用空间更大

管道通信方式的中间介质是文件通常称这种文件为管道文件。两个进程利用管道文件进行通信时一个进程为写进程,另一个进程为读进程写进程通过写端(发送端)往管道文件中写入信息;读进程通过读端(接收端)从管道文件中读取信息。两个进程协调不断地进行写、读便会构成双方通过管道傳递信息的流水线。

利用系统调用PIPE()创建一个无名管道文件通常称为无名管道或PIPE;利用系统调用MKNOD()创建一个有名管道文件,通常称為有名管道或FIFO

PIPE是一种非永久性的管道通信机构,当它访问的进程全部终止时它也将随之被撤消;它也不能用于不同族系的进程之间的通信。而FIFO是一种永久的管道通信机构它可以弥补PIPE的不足。

管道文件被创建后便可对它进行读写操作,通过系统调用WRITE()和READ()来实现通信完毕后,可将管道文件关闭用CLOSE()来实现。

消息通信方式以消息缓冲区为中间介质通信双方的发送和接收操作均以消息为单位。在存储器中消息缓冲区被组织成队列,通常称之为管道和消息队列的区别

创建管道和消息队列的区别用系统调用MSGGET()来实现,这一步工作也被称为管道和消息队列的区别的初始化在进行通信时,管道和消息队列的区别的发送和接收分别用系统调用MSGSND()和MSGRCV()来实现在需要改变队列的使用权限及其它一些特性时,用MSGCTL()来实现

我要回帖

更多关于 怎么获得Linux管理权限 的文章

 

随机推荐