在Gateway中通過判斷加速協(xié)議protocolAccelerate判斷是否預先對數(shù)據(jù)進行encode(preEncodeForClient),我想問的是,在這里預先對數(shù)據(jù)進行encode,和在連接上發(fā)送數(shù)據(jù)時對數(shù)據(jù)進行encode有什么區(qū)別?
預先協(xié)議編碼有助于提升系統(tǒng)性能,主要是在群發(fā)以及廣播時降低cpu消耗提升性能以及包合并減少網卡壓力。
減少cpu消耗:
如果不預先協(xié)議編碼,群發(fā)時每個客戶端都要根據(jù)每個客戶端協(xié)議編碼一次。舉個例子:假如廣播給1W個客戶端,那么就要編碼1W次,消耗會很大。如果預先協(xié)議編碼,那么不管廣播給多少人一次廣播只是編碼一次。
降低網卡壓力:
預先編碼的另外一個好處就是可以合并數(shù)據(jù)包,大大減少網卡出包量,大大降低網卡壓力。
比如每秒向1W個客戶端廣播100條數(shù)據(jù),正常情況網卡每秒要向外發(fā)送100W個包,這種情況就可以建立一個每秒發(fā)送一次的緩沖隊列,將1秒內的數(shù)據(jù)包通過預先編碼合并成一個包,然后再廣播發(fā)送。那么網卡的出包量將會從100W/S降低到1W/S。網卡壓力成指數(shù)型降低。另外因為包合并,send的系統(tǒng)調用也將從100W/S降低為1W/S,也會大大降低cpu消耗。