如何通俗理解中間件
阿新 • • 發佈:2018-10-16
很好 頻繁 本質 jvm c++的函數 了解 綁定 型號 問題
因此,我們口中的“中間件”一般有兩個含義,一個含義是數據庫中間件,另一個含義類似於 SDK ,但無論如何,意思都是一樣的:當前編程平臺並不能有效地操作目標平臺的數據,因此需要一個中間平臺來改善訪問。
中間件一開始是為了解決一個很頭疼的問題: Java 無法直接操縱內存,內存訪問必須經過 JVM ( Java 虛擬機)。因此,直接操縱內存的部分最好由 C/C++來完成,再由 Java 調用 C/C++的函數。這樣一來,就有了專門用 C/C++開發的中間件,供 Java 調用。
後來,在數據庫的不斷發展中,人們意識到直接操縱數據庫並不是一個很好的做法,因為操縱數據庫本質上是用共享內存(多進程,多 CPU 核心,甚至多 CPU 共享同一塊內存)實現的,而共享內存會帶來很多問題,例如,在老一些的 CPU 型號上,如果某個 CPU 核心發現要訪問的內存不在自己的 L1 緩存上,也不在共享 L2 緩存上,那就會鎖住尋址總線,並按照 L3->L2->L1 的順序來傳輸數據,全程耗時大概為 300 ~ 500 納秒,而一個加法指令的耗時才不到 2 納秒。這樣一來,如果多個進程共享一塊內存,那就很可能導致尋址總線頻繁被鎖死,軟件運行的效率非常非常低。中間件可以很大地改善這個問題:用專有的進程來訪問數據庫。這樣,只有中間件的進程才能訪問數據庫,如果把中間件的進程與 CPU 核心進行綁定,那就能一勞永逸地解決總線鎖死問題,因為其他線程永遠不需要訪問數據庫。有些老外意識到了這個問題,並編寫了相應的解決方案,命名為“中間件”。
因此,我們口中的“中間件”一般有兩個含義,一個含義是數據庫中間件,另一個含義類似於 SDK ,但無論如何,意思都是一樣的:當前編程平臺並不能有效地操作目標平臺的數據,因此需要一個中間平臺來改善訪問。
如何通俗理解中間件