這麼解釋問題吧:
單程序單執行緒:乙個人在乙個桌子上吃菜。
多程序單執行緒:多個人每個人在自己的桌子上吃菜。
多執行緒的問題是多個人同時吃一道菜的時候容易發生爭搶,
對於 windows 系統來說,【開桌子】的開銷很大,因此 windows 鼓勵大家在乙個桌子上吃菜。因此 windows 多執行緒學習重點是要大量面對資源爭搶與同步方面的問題。
對於 linux 系統來說,【開桌子】的開銷很小,因此 linux 鼓勵大家盡量每個人都開自己的桌子吃菜。這帶來新的問題是:坐在兩張不同的桌子上,說話不方便。因此,linux 下的學習重點大家要學習程序間通訊的方法。
補充:有人對這個開桌子的開銷很有興趣。我把這個問題推廣說開一下。
開桌子的意思是指建立程序。開銷這裡主要指的是時間開銷。
可以做個實驗:建立乙個程序,在程序中往記憶體寫若干資料,然後讀出該資料,然後退出。此過程重複 1000 次,相當於建立/銷毀程序 1000 次。在我機器上的測試結果是:
ubuntulinux:耗時 0.8 秒兩者開銷大約相差一百倍。windows7:耗時 79.8 秒
這意味著,在 windows 中,程序建立的開銷不容忽視。換句話說就是,windows 程式設計中不建議你建立程序,如果你的程式架構需要大量建立程序,那麼最好是切換到 linux 系統。
大量建立程序的典型例子有兩個,乙個是 gnu autotools 工具鏈,用於編譯很多開源**的,他們在 windows 下編譯速度會很慢,因此軟體開發人員最好是避免使用 windows。另乙個是伺服器,某些伺服器框架依靠大量建立程序來幹活,甚至是對每個使用者請求就建立乙個程序,這些伺服器在 windows 下執行的效率就會很差。這"可能"也是放眼全世界範圍,linux 伺服器遠遠多於 windows 伺服器的原因。
本文整理自我在 segmentfault 的問答。
科普帖 Linux作業系統
使用計算機必然會接觸作業系統,現代作業系統已經發展的十分成熟,一般使用者都可以很輕鬆的使用計算機。然而,對於要利用計算機進行專業開發和應用的使用者來說,需要更加深入地理解作業系統的原理和執行機制,這樣才能更加有效地利用計算機為自己的專業服務。計算機作業系統由硬體和軟體兩部分組成。硬體是組成一台計算機...
科普帖 Linux作業系統
使用計算機必然會接觸作業系統,現代作業系統已經發展的十分成熟,一般使用者都可以很輕鬆的使用計算機。然而,對於要利用計算機進行專業開發和應用的使用者來說,需要更加深入地理解作業系統的原理和執行機制,這樣才能更加有效地利用計算機為自己的專業服務。計算機作業系統由硬體和軟體兩部分組成。硬體是組成一台計算機...
科普帖 Linux作業系統
使用計算機必然會接觸作業系統,現代作業系統已經發展的十分成熟,一般使用者都可以很輕鬆的使用計算機。然而,對於要利用計算機進行專業開發和應用的使用者來說,需要更加深入地理解作業系統的原理和執行機制,這樣才能更加有效地利用計算機為自己的專業服務。計算機作業系統由硬體和軟體兩部分組成。硬體是組成一台計算機...