將硬碟上一個程序分成幾段載入內存,是多進程還是多線程?

把硬碟上一個程序的幾個部分都載入內存,每一段分配一個CPU執行它。這是多進程還是多線程?個人傾向認為是多進程。

*************我今天看了&<&&>,傾向於認為是多進程單線程**************

進程是計算機處理工作任務的最小單位,它只看一個一個的進程,而不管進程是否來自同一個程序,每個進程都是不同的。一個程序的幾個部分都分別載入內存,因此形成多個不同的進程。每一段分配一個cpu執行它,說明是在一個進程上只有一個控制流,是單線程。


多進程多線程的區別是多個執行流是否共享地址空間。

「把硬碟上一個程序的幾個部分都載入內存」從這句話無法判斷是否共享地址空間,所以都有可能。


多進程就是你的程序是否支持多開。例如qq可以。word也可以。有時候我們特別限制多開。例如某些遊戲,android下面的多數程序。

然後如果是順序載入內存,應該還是單線程的。如果是同時載入,肯定要多線程。


正在複習操作系統的我,,我想表示

我特么複習的是個鬼啊,想了半天沒想明白,滾去看書了。

………………………………………………………………………………

考完了,回答一波,一個進程一般可能對應多個程序。

進程是資源分配的基本單位,而線程是系統獨立調度分配的最小單元,也是程序的最小單元。

問題感覺有點奇怪,但是個人也比較傾向多線程。


把硬碟上一個程序的幾個部分都載入內存,每一段分配一個CPU執行它。這是多進程還是多線程?個人傾向認為是多進程

現代操作系統載入程序是分段分頁的,代碼段中的程序在執行時通過缺頁中斷按需載入內存。而這個過程是透明的,程序員不需要干涉。

我們無法通過「每一段(程序)分配一個CPU執行它」這樣的描述判斷程序是多線程還是多進程的。若操作系統在內核級支持進程/線程,我們可以說一個程序的進程/線程可以運行在多個CPU上。

建議先學習一下操作系統課程。


照題主的說法直接上動態鏈接不是就完事了嗎。


都行的吧,一般是多線程


題主表述有點奇怪,沒怎麼看懂.....然而一個單線程的程序本來內存分配就不一定連續的吧...比如你用了vector之類的東西...


所以你對於「一個程序」的定義是什麼。。。


只有一條進程樹,是單進程,但任務數多,是多線程


同意@並不麻煩 的回答,這個問題改成「用多線程或多進程哪個更好?」也許會好一點。

小白來答一下,說得不對別噴我啊~

如果你看過[1]《計算機組成與設計: 硬體/軟體介面》,你會知道程序在調入內存時確實是分段(或者說是分頁)調入的。

設計這種調度方式的時候大部分計算機內存還不大而且沒有多核,這樣設計的主要目的有兩個:

1.避免程序過大超出內存容量

2.實現多個程序共享內存資源,用戶角度實現多個程序同時運行

這套調度演算法計算機交給系統內核去解決,所以不同的操作系統具體的實現可能不同。當然,無論作為用戶還是作為程序開發者,這都是黑箱操作,我們不能決定。

至於各個主流操作系統是怎麼實現的,建議參考一下[2]Operating System Concepts(俗稱恐龍書),關於多線程和多進程的區別裡面介紹的也很詳細。

簡單講多線程是程序將自己的資源分配給自己的子線程,也就是不會佔用該程序外部資源;而多進程可以在創建子進程的時候重新出分配一部分資源。多線程和多進程各自適合的用途...嗯...下面我編不下去了。

所以說,如果這個問題問的是「程序在分頁調入內存時,內核使用多線程或多進程,哪個效果更好」也許更值得討論。然而我並不知道答案,也不知道這種討論有沒有意義,還希望可以有大神給科普。

學習不精,班門弄斧

如有紕漏,還望指正

參考資料:

[1]計算機組成與設計: 硬體/軟體介面(原書第4版) (豆瓣)

[2]Operating System Concepts (豆瓣)


問題本身就是錯的,一個程序肯定是從一個入口開始執行,分成幾段分別執行是什麼鬼?每一段都是一個單獨的程序不成?


推薦閱讀:

嵌入式是大坑的說法,是否與學生的信息不對稱有關?
寧美國度等等組裝機真的那麼差勁?
如何徹底的破壞一台電腦?
作為底層碼農被精英碼農的成功事迹不斷鞭笞是什麼感受?
如何評價我國的<神威.太湖之光>超級計算機獲得「戈登?貝爾」獎?

TAG:編程 | 計算機 | 多線程 |