程序間通訊中有名管道的FIFO檔案和一般檔案有什麼區別

時間 2021-06-06 10:01:47

1樓:the gc

說說我的理解

這個得先說匿名管道的缺點,匿名管道無法讓兩個沒有關係的程序通訊。原因在於他是基於記憶體的,其他程序沒有辦法找到這塊記憶體,也就沒有辦法通訊了。那麼命名管道的意義就在於,他有了名字,有了名字,每個程序就能找到他,也就可以完成通訊了。

具體的實現來說,命名管道的檔案不是用來承載資料的,而且用來做位址用的,為了讓每個程序都能通過這個位址進入通訊的大門,假設他對應的檔名是a,程序1開啟a的時候,拿到乙個fd,file,inode,作業系統判斷這個檔案型別,知道是命名管道檔案,會給他分配一塊記憶體,這時候你操作這個檔案的時候,資料是寫到記憶體裡的,同理,這時候程序2也開啟這個檔案,也拿到乙個fd,file,inode。但是乙個檔案只有乙個inode。所以他們操作的是同乙個inode,那就意味著他們操作的是同一塊記憶體,這樣就可以通訊了。

最後,兩個程序通過乙個一般檔案通訊當然也是可以的。但是會涉及到硬碟的操作,效率自然就會低。可以參考

the gc:理解程序間通訊

php多程序間通訊的問題,程序池如何儲存?

codinghuang 看你的想法,是打算用純PHP寫乙個類似Swoole的非同步伺服器。那我直接說Swoole的實現實現思路了。第乙個問題,Masrer程序如何和Worker程序通訊。這個不是把Worker程序存起來,然後和Worker程序通訊。Master程序和Worker程序通訊是使用udg。...

程序間通訊最快速高效的辦法是共享記憶體嗎?

泥潭裡的金魚 我個人建議用socket,如果極端需要效能的,你也不會考慮用到多程序處理。所以我個人認為用socket犧牲一點點忽略不計的效能,帶來的架構上的靈活,可伸縮性是事半功倍的方案。 yoodaa 程序間通訊還有很多方式,比如管道,訊息佇列,套接字。相對來說共享記憶體速度比較快,其次是套接字,...

什麼是執行緒(程序)通訊,為什麼需要通訊?

check 777 程序通訊就是為了完成程序互斥和程序同步而存在的,假如有程序A和程序B。程序A想進入臨界區,程序B也想進入臨界區,這兩個程序得協商一下吧。而這個協商由OS負責還是全部由程序負責需要看程序通訊的方式。 圍城 因為有些複雜程式或者是系統需要多個程序或者執行緒共同完成某個具體的任務,那麼...