簡體   English   中英

應用之間的通信

[英]Communication between applications

我有3個選擇:套接字,activeX,com,以便在一台計算機上的應用程序之間進行通信。 哪個更快?

只要在一台機器上運行,進程間通信就會受到總線帶寬的根本限制。 內存到內存的副本,無論是在TCP / IP堆棧中完成,命名管道支持代碼還是共享內存。 這使得它們都同樣有效。

但有一個細節很重要,即傳輸的數據量以及為完成工作而通過的軟件層數。 當數據量很大時,內存總線帶寬僅限制。 對於像COM這樣的遠程過程調用協議,情況不一定如此。 只需要序列化函數調用的參數,如果不傳遞數組,則只能是少數幾個字節。 現在開銷很重要,當你使用像COM這樣的高級協議時,有相當多的開銷。

使用套接字的明顯缺點是你必須自己編寫所有的de / serialization代碼。 如果具有組件的協議不簡單,則無關緊要。 為了方便而交易您的工作時間是典型的選擇,只有您可以做到。

好吧,想一想 - 套接字是最低級別的,COM是使用套接字,ActiveX是使用COM。 哪一個更快? 當然,插座。 但這只是在詢問程序執行速度和數據傳輸速率時。 但是,如果您不知道自己在做什么,使用套接字開發程序會更加困難。 更不用說你可能會提出一些比COM差的糟糕實現。 此外,當你使用ActiveX時,你可以獲得的套接字沒有那么多的可重用組件,更不用說如果你想與MS Office通信,你將不得不使用COM。

您沒有詳細說明您正在嘗試做什么或需要做出哪些考慮。 例如,“快速”是指高帶寬? 低延遲? 您是否有可能需要稍后在計算機之間進行通信? 等等。

也就是說,ActiveX是COM的一個特例( 介紹activeX )。 如果您已經熟悉COM或ActiveX,並且根據您正在嘗試做什么,您可能能夠編寫相對較少的代碼,因為MS開發工具可以為您處理大量代碼。

如果你不熟悉它,那么這是一個相當復雜的技術,可能很難解決。 因此,如果您只是嘗試實現一些基本的進程間通信,那么使用套接字可能更容易。 另一方面,這可能需要您進行更低級別的工作。

我還將IPC委托給一個框架,例如ACE(自適應通信框架)。 例如Ace的實現是穩定的,它是跨平台的。

你好,你可以使用共享內存嗎? 甚至Oracle也在其產品中使用共享內存。 共享內存很快。

實際上哪個更快可能並不重要。 如果是這樣,那么選擇最方便開發和維護的方法。 即使您無法保存任何可測量的運行時,也可以節省您自己的時間。

ActiveX或多或少是COM上的一個花哨的營銷名稱(ActiveX組件/控件是一個只支持IUnknown接口的對象),因此您的選擇實際上取決於COM與Socket。

對於跨進程通信,您可以使用套接字更快地編寫內容...如果您是一個好的套接字和Windows程序員,因為您將獨立,因為套接字基本上無法幫助您。 這並不意味着COM不快,或者性能不好,但理論上你總是能比開箱即用的系統做得更好,但前提是你掌握了整個事情。

最后,如果您需要與第三方產品或Windows之外的其他平台進行通信,則套接字更具可移植性。

很難說哪個更快,但使用COM肯定是你列出的最靈活的選擇。 除非你喜歡通過字節流進行groveling。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM