mark 為何mod效能如此差

2021-08-19 10:59:52 字數 915 閱讀 2363

近期接到乙個需求,因併發訪問單張表導致時延過大,需要拆成10張表,對於objid模10來訪問對應的表。

因涉及併發及statement快取,將原單個字串sql語句擴充套件為長度為10的字串陣列,將單個statement快取擴充套件為長度為10的statement快取陣列。

增加開關判斷,true時走分表邏輯,false時走原邏輯。

原始**為

int funcname(long objid,...)

修改為

int funcname(long objid,...)

else

int iret = getpreparedstatement(*stmttmp, psqlstr);

......

}

開關關閉時效能和修改前持平,開啟時下降明顯。

效能下降嚴重,各種分析、求助無果。

總是有一種感覺,是mod帶來的效能下降,於是改為與運算。

重新測試,效能和開關關閉時持平,達到預期效果。

從指令數分析,取模運算和與運算也僅差乙個指令,這點差異對應幾百萬指令簡直是九牛一毛,

但是效果卻有如此大的差異,至於具體原因,苦思無果,難道觸發了蝴蝶效應。。。

領導們和se們都很懷疑,看到結果也只能事實勝於雄辯了。

const long spilit_and_operation_base_num = 7;

int funcname(long objid,...)

else

int iret = getpreparedstatement(*stmttmp, psqlstr);

......

}

或許可以作為效能優化點,對於2的n次方的取模運算,可以改為2的n次方-1的與運算。

為何回憶如此撩人

今晚聽著 多年以後 感慨良多,為何會有如此傷感令人回憶的故事?不同的年齡段 同一段相同的故事情節,會有不同的反應。相信80後90後的讀者朋友應該會深有體會吧?像上海灘1980版,射鵰英雄傳1983版,神鵰俠侶06版,天龍八部03版。這一類神一樣的存在,至少在我的心中,你再複製,也無非影響它們在我心中...

我們為何如此設計

在這裡 我無意引入太多諸如優雅,華麗 繁複之類的概念 或者說形容詞 我希望謹 慎的運用能夠幫助讀者意識到它們所代表的重要性和真正含義。就我所知 無論對於大公司還是小公司 又或者擁有多麼強悍技術力量的個人 設計都 是不可迴避的話題 如果有人說 無設計 也是一種設計 相信我 他一定在說謊 也許你曾聽到過...

Linux之路為何如此艱難?

在本文中,所謂 linux 之路 是指通向完美 linux 桌面的道路。談起 linux 桌面,有人不屑一顧,嗤之以鼻。實際情況如何?11 月29日,mint 8 一種比較完美的 linux 桌面 正式發布,在我們國內反響不大。我國 linux 發展之落伍,我國 linux 觀念之怪異,由此可見一斑...