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

時間 2021-05-13 08:21:04

1樓:泥潭裡的金魚

我個人建議用socket,如果極端需要效能的,你也不會考慮用到多程序處理。所以我個人認為用socket犧牲一點點忽略不計的效能,帶來的架構上的靈活,可伸縮性是事半功倍的方案。

2樓:yoodaa

程序間通訊還有很多方式,比如管道,訊息佇列,套接字。相對來說共享記憶體速度比較快,其次是套接字,只比共享記憶體慢那麼一丟丟。但從架構設計上來講,推薦用套接字,因為可以跨物理機通訊.

3樓:白一梓

使用共享記憶體必不可免的,就是要引入鎖的概念。如果讀寫競爭比較頻繁的話,效能肯定會受影響,如果讀寫的時間端交錯開的話,肯定會有乙個比較理想的效能。

4樓:Aman

理論上應該是的,不過,你需要在程序間同步操作上花心思,這與多執行緒的同步有區別,需要核心物件(互斥器,訊號量等)的介入。這些操作可能會影響效能,設計上與資料吞吐量等有關係。

另外,你還要注意,任何標準容器如 vector、string 等都不能直接放入共享記憶體,因為它們裡面的指標指向的是本地位址空間中的位置,對於另乙個程序來說都是野指標。所以你可能需要設計一套用於共享記憶體的容器(關鍵在於不能使用指標,要使用 offset,並保持緊湊)。boost 的 ipc 可供選擇或參考,當然,還有其它一些現成的庫。

如果你採用類似遠端呼叫的通訊模型,即呼叫乙個函式傳送資料並等待返回結果,你還需要決策是否要支援 callback;也就是程序 A 呼叫程序 B 的函式 f 時,f 函式又呼叫程序 A 的 g 函式。這會增加同步機制的複雜程度。

其實,在大多數時候,你都可以選擇使用 socket 來做程序間通訊。好處是一旦完成,你的程式不光能程序間通訊,還能跨機器、跨平台通訊。而最棒的一點是,socket 在本機上可以使用 loopback。

經過我的測試,在大塊資料上,其效能直逼記憶體拷貝速度的理論上限,這是非常令人振奮的。

MQ 等基於訊息的通訊方式也是很好的選擇呀,至於效能,只能通過測試用例來得到答案。

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

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

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

the gc 說說我的理解 這個得先說匿名管道的缺點,匿名管道無法讓兩個沒有關係的程序通訊。原因在於他是基於記憶體的,其他程序沒有辦法找到這塊記憶體,也就沒有辦法通訊了。那麼命名管道的意義就在於,他有了名字,有了名字,每個程序就能找到他,也就可以完成通訊了。具體的實現來說,命名管道的檔案不是用來承載...

漂移真的是賽車最快速的過彎方式嗎?

Dean Hu 並不是在大多數情況下,漂移更像是一種觀賞性運動 某些情況下比如拉力賽和頭D裡出現的touge 山道競速 中,在某些情況下,漂移過彎可能會更有優勢 林倩羽羽羽羽羽 是,且全都是。不管是拉力還是場地,漂移都是唯一最快的跑法。因為不漂移你沒辦法集氮氣,沒有氮氣的影響不同我多說吧?至於F1為...