天天看點

linux是一個工程而不是理論

今天無聊的時候看了一會linux的FAQ,裡面着重提出,linux不是一個很好的計算機科學理論而是一個很好的工程,很多人在郵件清單中提出一個新的想法,真的是很有創意的想法,但是很無情的被那些大牛們給咔嚓了,然後Linus或者Alan Cox等人就會給人一種很不随和的形象,其實他們都很忙,都有自己的工作,對于他們來說,寫代碼并且給出測試資料比空洞地談理論要好得多,他們是典型的實踐派,如果你提出了一個新的觀點,那麼最好的方式就是用代碼實作它,并且将更新檔和測試資料送出到社群,很多的計算機科學家們的理論在linux開發者那裡都被不屑一顧的否定,linux的開發者們最煩的就是紙上談兵了,舉個例子就是多線程,理論證明越多的線程效率越高,但是那是在各方面都到位的基礎上的,現實情況是,沒有那麼理想的情況,于是linux就不提倡建立很多線程,按照經驗值,一個cpu平均1.5個線程就足夠了,其實linux的排程器決定了linux中最好的情況就是線程的數量和cpu的數量一樣多,因為linux是按照每cpu一個運作隊列排程的,這就是linux的方式。比如很多的理論都是強調某某算法多麼的高效,可是linux很簡單的用實踐否定了它。

事情又讓我想起了syslet,很早以前我就寫過一篇syslet更新檔的文章,今天我突然想起來它,不得不為其設計而驚歎,syslet用另外一個線程替換被阻塞的目前的線程而傳回,傳回使用者空間的這個syslet被do_fork的時候被賦予了CLONE_THREAD參數,那麼也就是說就是原來将要阻塞的程序的一個線程,這樣代替阻塞程序傳回使用者空間後也不會改變pid,改變的就是線程的id,就是這樣的,是以說,一點也不改變原始執行緒的語義,如果使用者非要在意線程id的話,那麼我相信使用者會自己處理好這個事情的,linux其實可以用任何方式在任何方向進行突破。

 本文轉自 dog250 51CTO部落格,原文連結:http://blog.51cto.com/dog250/1273953

繼續閱讀