2010-03-02 159 views
5

我目前正在進行性能分析。我們有一個基本的客戶/服務器應用程序如果我在同一臺計算機(本地主機)上運行客戶機/服務器而不是在局域網上的兩臺計算機上運行客戶機/本地主機與局域網:速度差異?

回答

6

TCP傳輸速度會!因爲如果你在同一臺計算機上運行它,它將本地轉發數據包,甚至不需要觸及LAN和網絡適配器。

但是客戶端+服務器的整體速度在不同的機器上可能會更好,特別是如果您不經常與服務器通信。

+0

@Andrey:這不一定是真的。如果應用程序指示它使用網絡層進行傳輸,則本地連接仍使用回送通過適配器傳遞。 – 2010-03-02 18:09:05

+2

請解釋應用程序如何指示使用網絡? – Andrey 2010-03-02 18:12:10

-1

這完全取決於你的應用程序做什麼....

爲例: 如果從客戶端傳輸10GB的文件服務器,那麼,它會有所作爲。

3

是的,通過網絡發送它的延遲會降低程序的速度。吞吐量不會,但如果您在發送數據之前等待回覆,則會由於額外的延遲而建立起來。

+0

對於本地主機,我得到0.024ms的ping時間,用於ping我的路由器,我得到0.339ms的時間 – Earlz 2010-03-02 18:02:47

+0

LnDCobra,這實際上是一個很好的答案。 「如果你在等待回覆」......當你與Skype上的某個人聊天時會發生這種情況。由於幾毫秒的延遲,整個對話速度變慢。 – 2010-03-02 18:12:11

+0

是的,如果你認爲0.024和0.339之間的差異很大,根據這些時間localhost比LAN快15倍。 – 2010-03-02 18:43:06

0

我不知道它是否可衡量(也取決於你的局域網的速度),但從邏輯的角度來看,當然是有區別的。本地主機將始終是最快的,因爲數據不是通過其他介質(如空氣或銅線)發送的。

但取決於您的應用程序的作用,這可能或可能不重要。

1

使用本地主機時,由於內存,磁盤,CPU等原因,本地資源更可能成爲性能瓶頸。使用兩臺計算機時,由於延遲,帶寬,吞吐量等原因,網絡更可能成爲瓶頸。數據包丟失等。

這取決於您的應用程序的功能以及它如何使用網絡,客戶端和服務器。

0

如果客戶端和服務器在同一臺計算機上,傳輸時間幾乎肯定會更快。根據客戶端和服務器消耗的其他資源,這對於整個程序的性能而言可能並不重要。

2

我剛剛在一個項目上遇到了這個問題。與localhost一起使用UDP至少比網絡連接快一個數量級(可能兩個數量級),並且我相信在本地主機上,網絡端口通常不存在1500的MTU上限。

一個未經證實的懷疑是PC上內置的網絡端口並不都是相同的質量,所以即使他們聲稱是千兆位,也可能無法真正走得這麼快。但它也可能導致大量的Windows系統調用(每個數據包有一個操作系統調用)可能是一個很大的開銷。通過TCP,我可以在一次調用中向操作系統傳遞大量數據。使用UDP時,我必須一次將它傳遞給一個數據包,受到MTU大小的限制,從而導致大量的OS調用。但尚未證實。

還沒有嘗試過Linux。