將硬碟上一個程序分成幾段載入內存,是多進程還是多線程?
把硬碟上一個程序的幾個部分都載入內存,每一段分配一個CPU執行它。這是多進程還是多線程?個人傾向認為是多進程。
*************我今天看了&<&&>,傾向於認為是多進程單線程**************進程是計算機處理工作任務的最小單位,它只看一個一個的進程,而不管進程是否來自同一個程序,每個進程都是不同的。一個程序的幾個部分都分別載入內存,因此形成多個不同的進程。每一段分配一個cpu執行它,說明是在一個進程上只有一個控制流,是單線程。
多進程多線程的區別是多個執行流是否共享地址空間。
「把硬碟上一個程序的幾個部分都載入內存」從這句話無法判斷是否共享地址空間,所以都有可能。多進程就是你的程序是否支持多開。例如qq可以。word也可以。有時候我們特別限制多開。例如某些遊戲,android下面的多數程序。
然後如果是順序載入內存,應該還是單線程的。如果是同時載入,肯定要多線程。正在複習操作系統的我,,我想表示
我特么複習的是個鬼啊,想了半天沒想明白,滾去看書了。
………………………………………………………………………………
考完了,回答一波,一個進程一般可能對應多個程序。進程是資源分配的基本單位,而線程是系統獨立調度分配的最小單元,也是程序的最小單元。
問題感覺有點奇怪,但是個人也比較傾向多線程。
把硬碟上一個程序的幾個部分都載入內存,每一段分配一個CPU執行它。這是多進程還是多線程?個人傾向認為是多進程
現代操作系統載入程序是分段分頁的,代碼段中的程序在執行時通過缺頁中斷按需載入內存。而這個過程是透明的,程序員不需要干涉。
我們無法通過「每一段(程序)分配一個CPU執行它」這樣的描述判斷程序是多線程還是多進程的。若操作系統在內核級支持進程/線程,我們可以說一個程序的進程/線程可以運行在多個CPU上。
建議先學習一下操作系統課程。
照題主的說法直接上動態鏈接不是就完事了嗎。
都行的吧,一般是多線程
題主表述有點奇怪,沒怎麼看懂.....然而一個單線程的程序本來內存分配就不一定連續的吧...比如你用了vector之類的東西...
所以你對於「一個程序」的定義是什麼。。。
只有一條進程樹,是單進程,但任務數多,是多線程
同意@並不麻煩 的回答,這個問題改成「用多線程或多進程哪個更好?」也許會好一點。
小白來答一下,說得不對別噴我啊~
如果你看過[1]《計算機組成與設計: 硬體/軟體介面》,你會知道程序在調入內存時確實是分段(或者說是分頁)調入的。
設計這種調度方式的時候大部分計算機內存還不大而且沒有多核,這樣設計的主要目的有兩個:
1.避免程序過大超出內存容量2.實現多個程序共享內存資源,用戶角度實現多個程序同時運行這套調度演算法計算機交給系統內核去解決,所以不同的操作系統具體的實現可能不同。當然,無論作為用戶還是作為程序開發者,這都是黑箱操作,我們不能決定。
至於各個主流操作系統是怎麼實現的,建議參考一下[2]Operating System Concepts(俗稱恐龍書),關於多線程和多進程的區別裡面介紹的也很詳細。
簡單講多線程是程序將自己的資源分配給自己的子線程,也就是不會佔用該程序外部資源;而多進程可以在創建子進程的時候重新出分配一部分資源。多線程和多進程各自適合的用途...嗯...下面我編不下去了。
所以說,如果這個問題問的是「程序在分頁調入內存時,內核使用多線程或多進程,哪個效果更好」也許更值得討論。然而我並不知道答案,也不知道這種討論有沒有意義,還希望可以有大神給科普。
學習不精,班門弄斧
如有紕漏,還望指正參考資料:[1]計算機組成與設計: 硬體/軟體介面(原書第4版) (豆瓣)[2]Operating System Concepts (豆瓣)問題本身就是錯的,一個程序肯定是從一個入口開始執行,分成幾段分別執行是什麼鬼?每一段都是一個單獨的程序不成?
推薦閱讀:
※嵌入式是大坑的說法,是否與學生的信息不對稱有關?
※寧美國度等等組裝機真的那麼差勁?
※如何徹底的破壞一台電腦?
※作為底層碼農被精英碼農的成功事迹不斷鞭笞是什麼感受?
※如何評價我國的<神威.太湖之光>超級計算機獲得「戈登?貝爾」獎?