是否須要對網路資料傳輸進行壓縮?怎樣選擇壓縮演算法?

2022-08-21 06:15:09 字數 1565 閱讀 5486

版權全部。

在網路網路傳輸過程中。最關心的就是傳輸效率問題。而提高傳輸效率最有效的方法就是對傳輸的資料進行壓縮。但壓縮資料也要耗費一定的時間,是不是壓縮後一定能提高效率呢?該怎樣選擇合適的壓縮演算法呢?請看本文的詳細分析。

如果資料大小為d (mb)

網路頻寬為       n (mbps)  -------------注意這裡是mbps,而不是通常說的mbps,      1mbps = 10mbps,       1000mbps=100mbps.

那麼傳輸資料時間t1 = d/n

如果壓縮演算法壓縮率為 r     ------------------ 即壓縮後資料大小為d*r

壓縮速度為           vc  mb/s

解壓縮速度為       vd mb/s

那麼壓縮後的傳輸資料時間 t2 =  d/vc + d*r/n + d/vd  = d/n * ( r + n/vc + n/vd)

對照:t1 = d/n

t2 = d/n*(r+n/vc+n/vd)

發現:假設r + n/vc + n/vd < 1,則壓縮後傳輸要更快。否則壓縮後傳輸反而更慢。

也就是壓縮後傳輸是否能更快是和壓縮演算法的 「壓縮率」,「壓縮/解壓縮速度」 以及當前「頻寬」相關

壓縮率越小,壓縮/解壓縮越快,頻寬越小,壓縮後傳輸越能提高效率。而在頻寬不變得情況下,壓縮率越小,壓縮/解壓縮越快 越好。

而因為壓縮率和壓縮/解壓縮速度成指數型反比(壓縮率提高一點點,壓縮/解壓縮速度就大幅減少),所以在選用壓縮演算法時:

最好選擇壓縮/解壓縮速度快的演算法,而不必太關注壓縮率(當然也不能全然不壓縮)

壓縮率r為 圖中的 1/ratio。

那麼帶入到上面公式:

lz4:1/2.084 + n/422 + n/1820 = 0.48 + n*0.0029   也就是說在頻寬n<179mbps的情況下。採用lz4壓縮能提高傳輸效率。

zlib:1/3.099 + n/21 + n/300 =  0.32 + n*0.051          也就是說在頻寬n<13.3mbps的情況下。採用zlib壓縮才幹提高傳輸效率,假設頻寬夠高,就不要壓縮了,否則會更慢

一般client訪問server,需進行壓縮。 (眼下client到server的頻寬還是比較低的)

server間傳輸,能夠不壓縮。或者用lz4壓縮。 (server間的頻寬通常是1000bps。即100mbps)

在頻寬 n<3.3mbps的情況下, 使用zlib要比lz4更快。

0-3.3mbps                       zlib壓縮傳輸最快。lz4壓縮傳輸次之。普通傳輸最慢

3.3 - 13.3mbps               lz4壓縮傳輸最快。zlib壓縮傳輸次之,普通傳輸最慢

13.3-179mbps                lz4壓縮傳輸最快,普通傳輸次之。zlib壓縮傳輸 反而更慢

大於179mbps                普通傳輸就能夠,由於網路傳輸速度 遠遠高於壓縮及解壓縮速度了

網路資料傳輸

網路資料傳輸 wcdma全名是widebandcdma,中文譯名為 寬頻分碼多工訪問 它可支援384kbps到2mbps不等的資料傳輸速率,在高速移動的狀態,可提供384kbps的傳輸速率,在低速或是室內環境下,則可提供高達2mbps的傳輸速率。而gsm系統目前只能傳送9.6kbps,固定線路mod...

是否需要對網路傳輸資料進行壓縮?如何選擇壓縮演算法?

在網路網路傳輸過程中,最關心的就是傳輸效率問題。而提高傳輸效率最有效的方法就是對傳輸的資料進行壓縮。但壓縮資料也要耗費一定的時間,是不是壓縮後一定能提高效率呢?該如何選擇合適的壓縮演算法呢?請看本文的具體分析。假設資料大小為d mb 網路頻寬為 n mbps 注意這裡是mbps,而不是通常說的mbp...

Qt 網路資料傳輸

以前寫介面主要用qt做ui,底層的功能是呼叫別人提供的介面,分工比較明確,但要更好地實現跨平台,則盡量使用qt內部的介面 當然,也有很多比較強大的庫,例如libcurl qt5自帶的網路處理模組qtnetwork 主要通過qnetworkaccessmanager qnetworkrequest q...