15-POSIX和System V消息队列比较
52.9 POSIX和System V消息队列比较
51.2节列出了POSIX IPC接口与System V IPC接口相比存在的各种优势:POSIX IPC接口更加简单并且与传统的UNIX文件模型更加一致,同时POSIX IPC对象是引用计数的,这样就简化了确定何时删除一个对象的任务。POSIX消息队列也同样具备这些常规优势。
POSIX消息队列与System V消息队列相比还具备下列优势。
- 消息通知特性允许一个(单个)进程能够在一条消息进入之前为空的队列时异步地通过信号或线程的实例化来接收通知。
- 在Linux(不包括其他UNIX实现)上可以使用poll()、select()以及epoll来监控POSIX消息队列。System V消息队列并没有这个特性。
但与System V消息队列相比,POSIX消息队列也具备下列劣势。
- POSIX消息队列的可移植性稍差,即使在不同的Linux系统上也存在这个问题,因为直到内核2.6.6才提供了对消息队列的支持。
- 与POSIX消息队列严格按照优先级排序相比,System V消息队列能够根据类型来选择消息的功能的灵活性更强。
POSIX消息队列在不同UNIX系统上的实现方式存在很大的差异。一些系统在用户空间提供实现,并且至少存在一种此类实现(Solaris 10),同时mq_open()手册也明确指出这种实现是不安全的。在Linux上,选择在内核中实现消息队列的原因之一是不相信能够提供一个安全的用户空间实现。