我正在学习Unix IPC,而我的书只谈论msg *系列函数。不过,在浏览手册页时,我了解到了mq_等价物。 http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi/0650/bks/SGI_Developer/books/T_IRIX_Prog/sgi_html/ch06.html描述了两者之间的一些差异,但我不确定这是多少实现特定的。是否有任何令人信服的理由使用一个家庭而不是另一个家庭?要么比其他人“更好”?我应该使用msgsnd还是mq_send?
2
A
回答
4
mq_*
函数是POSIX函数。 msg*
功能来自通常称为“System V IPC”的功能(因为它们是UNIX System V引入的包括共享内存和信号量的IPC设备的一部分)。我认为可以这样说,msg*
函数包含在POSIX和X/Open标准中,这是因为向后兼容性比其他方法更合适;这可能会使他们变得不公正,但通常标准试图避免多种方式来达到相同的结果。他们在原始版本的POSIX中都没有。
你需要考虑你将移植你的代码的位置。我会建议使用更现代的mq_*
函数,如果它们在任何需要的地方都可用的话 - 尽管我自己并没有使用它们。一般来说,msg*
函数比共享内存和信号量函数使用得少,但该接口比POSIX接口长(约十年或更长),所以它可能更广泛地可用。
1
一般来说,您应该尽量使用POSIX版本,因为它们应该更适合更广泛的平台。
主要区别在于POSIX队列可以在消息放入空队列时生成信号或产生新线程。 POSIX队列也总是返回最高优先级的最早的消息; SysV队列可以返回您指定的任何优先级的消息。
每个人的里程数都会有所不同,但我发现POSIX界面比SYSV或SysV IPC更为直观和不那么古怪。
相关问题
- 1. 我应该使用public $ var还是应该使用__construct()?
- 2. 我应该使用PurePDF还是AlivePdf
- 3. 我应该使用ABPersonViewController还是ABUnknownPersonViewController
- 4. 我应该使用Series.replace还是Series.str.replace?
- 5. 我应该使用requestanimationframe还是setTimeout?
- 6. 我应该使用SASS还是SCSS?
- 7. 我应该使用Boost.GIL还是死了?
- 8. 我应该使用Flash还是Java?
- 9. 我应该使用partial还是show.html.erb?
- 10. 我应该使用TNSNAMES.ORA还是tnsnames.ora?
- 11. 我应该使用pygame.event.get()还是pygame.event.poll()?
- 12. 我应该使用BroadcastReceiver还是Service?
- 13. 我应该使用urandom还是openssl_random_pseudo_bytes?
- 14. 我应该使用SyncLock还是Interlocked?
- 15. 我应该使用Backbone.emulateHTTP还是php file_get_contents
- 16. 我应该使用rand()还是rand_s()?
- 17. 我应该使用XMLHttpRequest/JSON还是iFrame?
- 18. 我应该使用NSOperation还是NSRunLoop?
- 19. 我应该使用UUID还是其他?
- 20. 我应该使用UIImageview还是其他?
- 21. 我应该使用TempData还是RedirectToAction?
- 22. 我应该使用SPContext还是ClientContext?
- 23. 我应该使用Timer,Handler还是ASyncTask?
- 24. 我应该使用SQL还是JSON
- 25. 我应该使用KeyGenerator还是SecretKeyFactory?
- 26. 我应该使用AJAX还是WebSockets。
- 27. 我应该使用值还是键?
- 28. 我应该使用Listener还是Observer?
- 29. 我应该使用WCF还是ASMX webservice?
- 30. 我应该使用System.out.println()还是别的?
哇,所以msg *函数不是POSIX?我的书叫他们“POSIX:XSI”消息队列... – Steven 2009-12-05 02:51:50
我认为这就是所谓的重新品牌。 ;) – Duck 2009-12-05 03:06:23
它们在POSIX中 - 它们不是由POSIX产生的(事实上它们是在POSIX之前的)。你的书是正确的,可以给他们贴上POSIX:XSI的标签。 – 2009-12-05 03:35:35