思考微内核--转载
版權聲明:轉載時請以超鏈接形式標明文章原始出處和作者信息及本聲明
http://www.blogbus.com/dreamhead-logs/1335184.html
關于微內核,我最早印象來自于操作系統。Andrew Tanebaum同Linus Torvalds的那場著名論戰將微內核這個名詞深深的印入了我的腦海,不過說實話,在很長一段時間內,我只是記住了這個詞而已,一直沒有弄清楚微內核究竟是怎樣一回事。再次聽說微內核是在工作以后,不過是在一個完全不同于操作系統的領域中,很多人都在說自己開發的系統是微內核的。同樣,我也只是記住了名詞,但是腦中卻產生了一些困惑:究竟什么才是微內核,它們所說的微內核同操作系統中的微內核有什么關系。深入Spring為我打開了微內核的大門,因為微內核也存在于Spring之中。
在那場關于OS的著名論戰中,Tanebaum老先生為我們解釋了微內核以及與之對應的宏內核,他認為對于宏內核來說,整個操作系統就是一個整體,包括了進程管理、內存管理、文件系統等等,而對微內核來說,操作系統的大部分在內核之外,彼此間通過消息進行通信。換句話說,對于微內核來說,進程管理、內存管理、文件系統根本就不是微內核的一部分,這是一個看起來難以讓人接受的結論,怎么能把操作系統內核的重要組成部分踢出去呢?請注意,我這里說的是,它們不是微內核的一部分,而不是說它們不是操作系統內核的一部分。有些讓人糊涂,怎么又冒出一個內核。本著高內聚的原則,操作系統的實現讓我們只需面對操作系統內核,而無需了解其內部實現。對于微內核的實現來說,其內部還會有一個內核,負責更加底層的內容,比如消息傳遞、中斷管理、底層的進程管理等等,而我們作為用戶所面對的內核不過是在這個內核之上構建起來的一個應用罷了。
其實,所謂的內核不過是在我們通常意義上的內核之中,還有一個更為基礎的內核而已,在這一點上,操作系統和普通應用沒有任何分別。比如作為普通的用戶來說,我們通常會把應用服務器視作一個內核,而某些應用服務器在其內部有一個用來構建應用服務器的基礎,比如JBoss前幾個版本使用的JMX,這便是它的微內核,它為我們提供的各種各樣的服務都是基于這個內核構建起來的。既然是作為基礎,微內核的設計通常都具備良好的可擴展性,只有這樣,我們才能夠讓我們的“內核”不斷的發展壯大。JBoss已經為我們做了一個很好的演示,源源不斷的新內容讓我們可以享受更好的服務。
前面說過,Spring為我打開了微內核的大門,那么Spring的微內核在哪里呢?這便是DI容器。我們已經知道了,Spring已經不只是一個單純的DI容器,還提供了許多其它的功能,比如AOP。如果我們只是簡單的學會使用它們,那可就讓一個很好的學習機會從身邊溜走了。研究Spring的微內核,FactoryBean便是無論如何不可錯過的,它是DI容器為我們參與容器組件組裝過程中而提供的接口。有了它,我們就可以定制自己的組件組裝過程,這樣我們就有了機會對一個普通的JavaBean做手腳,就像使用Spring AOP中常用的ProxyFactoryBean所做的一樣。FactoryBean讓DI容器具備了可擴展性,這樣,我們就不必把所有功能都做到Spring的DI容器中中去,而是作為一個FactoryBean對DI容器的功能進行擴展,對我們來說,因為大多數功能都是由Spring提供的,因此我們把它們視作了Spring“內核”的一部分,殊不知,其中還有一個叫做DI的微內核。除了Spring自身之外,現在已經有一些項目開始利用這個特性擴展Spring,比如,Acegi Security和Spring Modules。關于FactoryBean更多的細節,Spring參考文檔是一個不錯的去處。
有一些功能性的工作,我們即可以放到“微內核”中,也可以作為“微內核”的外掛存在像AOP功能,在Spring中,AOP是以外掛的形式存在,而在Hivemind中,它則被做到了內核之中。
這讓我想起了《C++沉思錄》上的經典論斷,“庫設計就是語言設計,語言設計就是庫設計”。同樣的同步功能,在Java中就是語言特征,而在C/C++中往往是以庫的形式存在。在這里,語言就是我們的微內核,庫就是微內核的外掛,而對普通的語言用戶而言,這些東西都是我們可以直接拿過來用的,都屬于我們的內核。按照這種說法,程序設計語言也是某種意義上的微內核,只不過,我們大多數時間內會直接同這個“微內核”打交道。
有一些微內核通過內部實現降低接口的復雜度,讓用戶使用起來簡單了許多,同時也減少了用戶無意而為的錯誤,這方面最好的例子就是現在已經讓人習以為常的Garbage Collection,因為許多程序設計語言已經把它做到了語言特征,我們便無需憂慮內存管理了。既然微內核提供給接口給內核使用,我們當然也可以直接使用這些功能,比如,我們為JBoss添加自己的服務,比如我們使用FactoryBean擴展自己的功能,甚至為微內核的操作系統添加新的服務。只不過在大多數情況下,我們面對的是內核而已,其實,我們在使用程序設計語言時,早已熟悉了直接面對微內核。
這便是我所理解的微內核。
轉載于:https://www.cnblogs.com/davidwang456/p/4462101.html
總結
- 上一篇: mysql 批量插入数据过多的解决方法
- 下一篇: 读logback源码系列文章(五)——A