2017-08-18 32 views
1

我正在使用套接字(TCP)來交換數據的開源軟件包。在Linux上,它可以使用本地Unix套接字或遠程套接字。當我將本地套接字的性能與遠程本地環回的性能進行比較時,我發現Unix套接字速度要快50倍。其他一切都是相同的。我應該期望unix套接字比本地環回TCP快50倍嗎?

這是性能差異預計,還是它表明代碼中的某處出現錯誤?

在大多數情況下,數據交換是雙向的,通常類似於一個字節的命令(uint8_t),說明發生了什麼,然後是一堆數據,通常大約1kb。

回答

0

如果您單獨發送初始字節,則您的協議實際上肯定會遇到Nagle算法。使用緩衝,或writev()sendmsg(),一次全部發送。

+0

我可以通過禁用Nagle的算法來測試嗎? – crobar

+0

當然,也許你想在生產代碼中這樣做,但如果效率是一個主要問題,那麼你應該儘可能地自己做緩衝或收集寫作。 – EJP

+0

謝謝,我會在下週測試,然後可能將其標記爲答案。 – crobar

相關問題