我正在學習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. 我應該使用表格還是div?
- 3. 我應該使用NSOperation還是NSRunLoop?
- 4. 我應該使用SASS還是SCSS?
- 5. 我應該使用SVN還是Git?
- 6. 我應該使用em還是px?
- 7. 我應該使用MapView還是MapFragment
- 8. 我應該使用Angular.copy()還是_.clone()?
- 9. 我應該使用BIT(1)還是BOOL?
- 10. 我應該使用GulpJS還是Ember-cli?
- 11. RegEx - 我應該使用Capture還是Group?
- 12. 我應該使用Boost.GIL還是死了?
- 13. 我應該使用int還是UInt16?
- 14. 我應該使用node-uuid還是uuid?
- 15. 我應該使用data.frame還是矩陣?
- 16. 我應該使用Get還是Load - nhibernate?
- 17. Numpy:我應該使用newaxis還是None?
- 18. 我應該使用JSON還是XML?
- 19. 我應該使用double還是float?
- 20. 我應該使用ImageButton還是Button?
- 21. 我應該使用Timer,Handler還是ASyncTask?
- 22. 我應該使用PowerShell還是CMD.exe?
- 23. JDO - 我應該使用detachCopy還是makeTransient?
- 24. 我應該使用PurePDF還是AlivePdf
- 25. 我應該使用plist,SQLite還是NsMutableArray?
- 26. 我應該使用AJAX還是WebSockets。
- 27. 我應該使用MySQL還是MongoDB?
- 28. Python:我應該使用eval,exec還是..?
- 29. 我應該使用WCF還是ASMX webservice?
- 30. 我應該使用fputs還是putchar?
哇,所以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