2 回答

TA貢獻1813條經(jīng)驗 獲得超2個贊
這么解釋問題吧:
1。單進程單線程:一個人在一個桌子上吃菜。
2。單進程多線程:多個人在同一個桌子上一起吃菜。
3。多進程單線程:多個人每個人在自己的桌子上吃菜。
多線程的問題是多個人同時吃一道菜的時候容易發(fā)生爭搶,例如兩個人同時夾一個菜,一個人剛伸出筷子,結(jié)果伸到的時候已經(jīng)被夾走菜了。。。此時就必須等一個人夾一口之后,在還給另外一個人夾菜,也就是說資源共享就會發(fā)生沖突爭搶。
1。對于 Windows 系統(tǒng)來說,【開桌子】的開銷很大,因此 Windows 鼓勵大家在一個桌子上吃菜。因此 Windows 多線程學(xué)習(xí)重點是要大量面對資源爭搶與同步方面的問題。
2。對于 Linux 系統(tǒng)來說,【開桌子】的開銷很小,因此 Linux 鼓勵大家盡量每個人都開自己的桌子吃菜。這帶來新的問題是:坐在兩張不同的桌子上,說話不方便。因此,Linux 下的學(xué)習(xí)重點大家要學(xué)習(xí)進程間通訊的方法。
--
補充:有人對這個開桌子的開銷很有興趣。我把這個問題推廣說開一下。
開桌子的意思是指創(chuàng)建進程。開銷這里主要指的是時間開銷。
可以做個實驗:創(chuàng)建一個進程,在進程中往內(nèi)存寫若干數(shù)據(jù),然后讀出該數(shù)據(jù),然后退出。此過程重復(fù) 1000 次,相當(dāng)于創(chuàng)建/銷毀進程 1000 次。在我機器上的測試結(jié)果是:
UbuntuLinux:耗時 0.8 秒
Windows7:耗時 79.8 秒
兩者開銷大約相差一百倍。
這意味著,在 Windows 中,進程創(chuàng)建的開銷不容忽視。換句話說就是,Windows 編程中不建議你創(chuàng)建進程,如果你的程序架構(gòu)需要大量創(chuàng)建進程,那么最好是切換到 Linux 系統(tǒng)。
大量創(chuàng)建進程的典型例子有兩個,一個是 gnu autotools 工具鏈,用于編譯很多開源代碼的,他們在 Windows 下編譯速度會很慢,因此軟件開發(fā)人員最好是避免使用 Windows。另一個是服務(wù)器,某些服務(wù)器框架依靠大量創(chuàng)建進程來干活,甚至是對每個用戶請求就創(chuàng)建一個進程,這些服務(wù)器在 Windows 下運行的效率就會很差。這"可能"也是放眼全世界范圍,Linux 服務(wù)器遠(yuǎn)遠(yuǎn)多于 Windows 服務(wù)器的原因。
- 2 回答
- 0 關(guān)注
- 130 瀏覽
添加回答
舉報