91欧美超碰AV自拍|国产成年人性爱视频免费看|亚洲 日韩 欧美一厂二区入|人人看人人爽人人操aV|丝袜美腿视频一区二区在线看|人人操人人爽人人爱|婷婷五月天超碰|97色色欧美亚州A√|另类A√无码精品一级av|欧美特级日韩特级

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

線程和進(jìn)程的關(guān)系與區(qū)別

FPGA之家 ? 來源:stranger huang ? 作者:stranger huang ? 2020-11-29 11:01 ? 次閱讀
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

可能學(xué)習(xí)嵌入式開發(fā)的讀者都聽說過這些專業(yè)名詞,但又多少人理解了? 首先,從定義開始,先看一下教科書上進(jìn)程和線程定義:進(jìn)程:資源分配的最小單位。線程:程序執(zhí)行的最小單位。 心中默念,啥啥啥,寫的這是啥。

1

進(jìn)程

進(jìn)程是程序執(zhí)行時(shí)的一個(gè)實(shí)例,即它是程序已經(jīng)執(zhí)行到課中程度的數(shù)據(jù)結(jié)構(gòu)的匯集。從內(nèi)核的觀點(diǎn)看,進(jìn)程的目的就是擔(dān)當(dāng)分配系統(tǒng)資源(CPU時(shí)間、內(nèi)存等)的基本單位。 舉例說明進(jìn)程: 想象一位有一手好廚藝的計(jì)算機(jī)科學(xué)家正在為他的女兒烘制生日蛋糕。他有做生日蛋糕的食譜,廚房里有所需的原料:面粉、雞蛋、糖、香草汁等。在這個(gè)比喻中,做蛋糕的食譜就是程序(即用適當(dāng)形式描述的算法)計(jì)算機(jī)科學(xué)家就是處理器(CPU),而做蛋糕的各種原料就是輸入數(shù)據(jù)。進(jìn)程就是廚師閱讀食譜、取來各種原料以及烘制蛋糕等一系列動(dòng)作的總和?,F(xiàn)在假設(shè)計(jì)算機(jī)科學(xué)家的兒子哭著跑了進(jìn)來,說他的頭被一只蜜蜂蟄了。計(jì)算機(jī)科學(xué)家就記錄下他照著食譜做到哪兒了(保存進(jìn)程的當(dāng)前狀態(tài)),然后拿出一本急救手冊(cè),按照其中的指示處理蟄傷。這里,我們看到處理機(jī)制是從一個(gè)進(jìn)程(做蛋糕)切換到另一個(gè)高優(yōu)先級(jí)的進(jìn)程(實(shí)施醫(yī)療救治),每個(gè)進(jìn)程擁有各自的程序(食譜和急救手冊(cè))。當(dāng)蜜蜂蟄傷處理完之后,這位計(jì)算機(jī)科學(xué)家又回來做蛋糕,從他離開時(shí)的那一步繼續(xù)做下去。

2

線程

線程是CPU調(diào)度的最小單位(程序執(zhí)行流的最小單元),它被包含在進(jìn)程之中,是進(jìn)程中的實(shí)際運(yùn)作單元。一條線程是進(jìn)程中一個(gè)單一順序的控制流,一個(gè)進(jìn)程中可以并發(fā)多個(gè)線程,每條線程并行執(zhí)行不同的任務(wù)。 一個(gè)標(biāo)準(zhǔn)的線程有線程ID、當(dāng)前指令指針(PC),寄存器集合和堆棧組成。另外,線程是進(jìn)程中的一個(gè)實(shí)體,是被系統(tǒng)獨(dú)立調(diào)度和分派的基本單元,線程自己不擁有系統(tǒng)資源,只擁有一點(diǎn)兒在運(yùn)行中必不可少的資源,但它可與同屬一個(gè)進(jìn)程的其他線程共享進(jìn)程所擁有的全部資源。一個(gè)線程可以創(chuàng)建和撤銷另一個(gè)線程,同一進(jìn)程中的多個(gè)線程之間可以并發(fā)執(zhí)行。由于線程之間的相互制約,致使線程在運(yùn)行中呈現(xiàn)處間斷性。 線程也有就緒、阻塞和運(yùn)行三種基本狀態(tài)。就緒狀態(tài)是指線程具備運(yùn)行的所有條件,邏輯上可以運(yùn)行,在等待處理機(jī);運(yùn)行狀態(tài)是指線程占有處理機(jī)正在運(yùn)行;阻塞狀態(tài)是指線程在等待一個(gè)事件(如某個(gè)信號(hào)量),邏輯上不可執(zhí)行。每一個(gè)程序都至少有一個(gè)線程,若程序只有一個(gè)線程,那就是程序本身。 舉例說明線程: 假設(shè),一個(gè)文本程序,需要接受鍵盤輸入,將內(nèi)容顯示在屏幕上,還需要保存信息到硬盤中。若只有一個(gè)進(jìn)程,勢(shì)必造成同一時(shí)間只能干一樣事的尷尬(當(dāng)保存時(shí),就不能通過鍵盤輸入內(nèi)容)。若有多個(gè)進(jìn)程,每個(gè)進(jìn)程負(fù)責(zé)一個(gè)任務(wù),進(jìn)程A負(fù)責(zé)接收鍵盤輸入的任務(wù),進(jìn)程B負(fù)責(zé)將內(nèi)容顯示在屏幕上的任務(wù),進(jìn)程C負(fù)責(zé)保存內(nèi)容到硬盤中的任務(wù)。這里進(jìn)程A,B,C間的協(xié)作涉及到了進(jìn)程通信問題,而且有共同都需要擁有的東西——-文本內(nèi)容,不停的切換造成性能上的損失。若有一種機(jī)制,可以使任務(wù)A,B,C共享資源,這樣上下文切換所需要保存和恢復(fù)的內(nèi)容就少了,同時(shí)又可以減少通信所帶來的性能損耗,那就好了。這種機(jī)制就是線程。 總的來說:進(jìn)程有獨(dú)立的地址空間,線程沒有單獨(dú)的地址空間(同一進(jìn)程內(nèi)的線程共享進(jìn)程的地址空間)。

3

多線程

進(jìn)程是程序在計(jì)算機(jī)上的一次執(zhí)行活動(dòng)。當(dāng)你運(yùn)行一個(gè)程序,你就啟動(dòng)了一個(gè)進(jìn)程。顯然,程序是死的(靜態(tài)的),進(jìn)程是活的(動(dòng)態(tài)的)。進(jìn)程可以分為系統(tǒng)進(jìn)程和用戶進(jìn)程。凡是用于完成操作系統(tǒng)的各種功能的進(jìn)程就是系統(tǒng)進(jìn)程,它們就是處于運(yùn)行狀態(tài)下的操作系統(tǒng)本身;所有由用戶啟動(dòng)的進(jìn)程都是用戶進(jìn)程。進(jìn)程是操作系統(tǒng)進(jìn)行資源分配的單位。進(jìn)程又被細(xì)化為線程,也就是一個(gè)進(jìn)程下有多個(gè)能獨(dú)立運(yùn)行的更小的單位。在同一個(gè)時(shí)間里,同一個(gè)計(jì)算機(jī)系統(tǒng)中如果允許兩個(gè)或兩個(gè)以上的進(jìn)程處于運(yùn)行狀態(tài),這便是多任務(wù)?,F(xiàn)代的操作系統(tǒng)幾乎都是多任務(wù)操作系統(tǒng),能夠同時(shí)管理多個(gè)進(jìn)程的運(yùn)行。多任務(wù)帶來的好處是明顯的,比如你可以邊聽網(wǎng)易云音樂,一邊上網(wǎng),與此同時(shí)甚至可以將下載的文檔打印出來,而這些任務(wù)之間絲毫不會(huì)相互干擾。那么這里就涉及到并行的問題,俗話說,一心不能二用,這對(duì)計(jì)算機(jī)也一樣,原則上一個(gè)CPU只能分配給一個(gè)進(jìn)程,以便運(yùn)行這個(gè)進(jìn)程。我們通常使用的計(jì)算機(jī)中只有一個(gè)CPU,也就是說只有一顆心,要讓它一心多用,同時(shí)運(yùn)行多個(gè)進(jìn)程,就必須使用并發(fā)技術(shù)。實(shí)現(xiàn)并發(fā)技術(shù)相當(dāng)復(fù)雜,最容易理解的是“時(shí)間片輪轉(zhuǎn)進(jìn)程調(diào)度算法”,它的思想簡(jiǎn)單介紹如下:在操作系統(tǒng)的管理下,所有正在運(yùn)行的進(jìn)程輪流使用CPU,每個(gè)進(jìn)程允許占用CPU的時(shí)間非常短(比如10毫秒),這樣用戶根本感覺不出來 CPU是在輪流為多個(gè)進(jìn)程服務(wù),就好像所有的進(jìn)程都在不間斷地運(yùn)行一樣。但實(shí)際上在任何一個(gè)時(shí)間內(nèi)有且僅有一個(gè)進(jìn)程占有CPU。如果一臺(tái)計(jì)算機(jī)有多個(gè)CPU,情況就不同了,如果進(jìn)程數(shù)小于CPU數(shù),則不同的進(jìn)程可以分配給不同的CPU來運(yùn)行,這樣,多個(gè)進(jìn)程就是真正同時(shí)運(yùn)行的,這便是并行。 并行處理(Parallel Processing)是計(jì)算機(jī)系統(tǒng)中能同時(shí)執(zhí)行兩個(gè)或更多個(gè)處理的一種計(jì)算方法。并行處理可同時(shí)工作于同一程序的不同方面。并行處理的主要目的是節(jié)省大型和復(fù)雜問題的解決時(shí)間。并發(fā)處理(concurrency Processing):指一個(gè)時(shí)間段中有幾個(gè)程序都處于已啟動(dòng)運(yùn)行到運(yùn)行完畢之間,且這幾個(gè)程序都是在同一個(gè)處理機(jī)(CPU)上運(yùn)行,但任一個(gè)時(shí)刻點(diǎn)上只有一個(gè)程序在處理機(jī)(CPU)上運(yùn)行 并發(fā)的關(guān)鍵是你有處理多個(gè)任務(wù)的能力,不一定要同時(shí)。并行的關(guān)鍵是你有同時(shí)處理多個(gè)任務(wù)的能力。所以說,并行是并發(fā)的子集。

4

多線程

線程是程序中一個(gè)單一的順序控制流程。進(jìn)程內(nèi)一個(gè)相對(duì)獨(dú)立的、可調(diào)度的執(zhí)行單元,是系統(tǒng)獨(dú)立調(diào)度和分派CPU的基本單元。在單一程序中同時(shí)運(yùn)行多個(gè)想成完成不同的工作,稱為多線程。 多線程是為了使得多個(gè)線程并行的工作以完成多項(xiàng)任務(wù),以提高系統(tǒng)的效率。線程是在同一時(shí)間需要完成多項(xiàng)任務(wù)的時(shí)候被實(shí)現(xiàn)的。 打個(gè)比方: 多進(jìn)程是立體交通系統(tǒng)(近似于立交橋),雖然造價(jià)高,上坡下坡多耗點(diǎn)油,但是不堵車。 多線程是平面交通系統(tǒng),造價(jià)低,但紅綠燈太多,老堵車。

5

線程與進(jìn)程的關(guān)系

(1)一個(gè)線程只能屬于一個(gè)進(jìn)程,而一個(gè)進(jìn)程可以有多個(gè)線程,但至少有一個(gè)線程; (2)資源分配給進(jìn)程,同一進(jìn)程內(nèi)的所有線程共享該進(jìn)程的所有資源; (3)線程在執(zhí)行過程中需要協(xié)作同步。不同進(jìn)程中的線程之間要利用消息通信的方法實(shí)現(xiàn)同步; (4)處理機(jī)分配給線程,即真正在處理機(jī)上運(yùn)行的是線程; (5)線程是進(jìn)程的一個(gè)執(zhí)行單元,也是進(jìn)程內(nèi)的可調(diào)用實(shí)體。

6

線程和進(jìn)程的區(qū)別

(1)線程共享內(nèi)存空間;進(jìn)程的內(nèi)存是獨(dú)立的; (2)同一個(gè)進(jìn)程的線程之間可以直接交流;兩個(gè)進(jìn)程想通信,必須通過一個(gè)中間代理來實(shí)現(xiàn); (3)創(chuàng)建新進(jìn)程很簡(jiǎn)單;創(chuàng)建新進(jìn)程需要對(duì)其父進(jìn)程進(jìn)行一個(gè)克隆; (4)一個(gè)線程可以控制和操作同一進(jìn)程里的其他線程;但是進(jìn)程只能操作子進(jìn)程; (5)改變注線程(如優(yōu)先權(quán)),可能會(huì)影響其他線程;改變父進(jìn)程,不影響子進(jìn)程。 (6)調(diào)度:線程作為分配和調(diào)度的基本單位,進(jìn)程作為擁有資源的基本單位 (7)并發(fā)性:不進(jìn)進(jìn)程之間可以并發(fā)執(zhí)行,同一進(jìn)程內(nèi)的線程也可以并發(fā)執(zhí)行 (8)擁有資源:進(jìn)程是擁有資源的一個(gè)獨(dú)立單位,線程不擁有系統(tǒng)資源,但是可以訪問隸屬于進(jìn)程的系統(tǒng)資源 (9)系統(tǒng)開銷:在創(chuàng)建和撤銷進(jìn)程的時(shí)候,系統(tǒng)都要分配和回收資源,導(dǎo)致系統(tǒng)的明顯大于創(chuàng)建和撤銷線程時(shí)的開銷。但進(jìn)程有獨(dú)立的地址空間,進(jìn)程崩潰后,在保護(hù)模式的下不會(huì)對(duì)其他進(jìn)程造成影響,而線程只是進(jìn)程中的不同執(zhí)行路徑。線程有自己的堆棧和局部變量,但線程之間沒有獨(dú)立的地址空間,一個(gè)線程死后就等于整個(gè)進(jìn)程死掉,所以多進(jìn)程程序要比多線程程序健壯,但是在進(jìn)程切換的時(shí)候消耗的資源較大,效率差。 根本區(qū)別就一點(diǎn):用多進(jìn)程每個(gè)進(jìn)程有自己的地址空間(address space),線程則共享地址空間。 總結(jié):多線程執(zhí)行效率高; 多進(jìn)程耗資源,安全。

7

進(jìn)程的優(yōu)缺點(diǎn)

7.1 進(jìn)程的優(yōu)點(diǎn)

1)順序程序的特點(diǎn):具有封閉性和可再現(xiàn)性; 2)程序的并發(fā)執(zhí)行和資源共享。多道程序設(shè)計(jì)出現(xiàn)后,實(shí)現(xiàn)了程序的并發(fā)執(zhí)行和資源共享,提高了系統(tǒng)的效率和系統(tǒng)的資源利用率。

7.2 進(jìn)程的缺點(diǎn)

操作系統(tǒng)調(diào)度切換多個(gè)線程要比切換調(diào)度進(jìn)程在速度上快的多。而且進(jìn)程間內(nèi)存無法共享,通訊也比較麻煩。線程之間由于共享進(jìn)程內(nèi)存空間,所以交換數(shù)據(jù)非常方便;在創(chuàng)建或撤消進(jìn)程時(shí),由于系統(tǒng)都要為之分配和回收資源,導(dǎo)致系統(tǒng)的開銷明顯大于創(chuàng)建或撤消線程時(shí)的開銷。

8

線程的優(yōu)缺點(diǎn)

8.1 線程的優(yōu)點(diǎn)

1)它是一種非常"節(jié)儉"的多任務(wù)操作方式。在Linux系統(tǒng)下,啟動(dòng)一個(gè)新的進(jìn)程必須分配給它獨(dú)立的地址空間,建立眾多的數(shù)據(jù)表來維護(hù)它的代碼 段、堆棧段和數(shù)據(jù)段,這是一種"昂貴"的多任務(wù)工作方式。而運(yùn)行于一個(gè)進(jìn)程中的多個(gè)線程,它們彼此之間使用相同的地址空間,共享大部分?jǐn)?shù)據(jù),啟動(dòng)一個(gè)線程 所花費(fèi)的空間遠(yuǎn)遠(yuǎn)小于啟動(dòng)一個(gè)進(jìn)程所花費(fèi)的空間,而且,線程間彼此切換所需的時(shí)間也遠(yuǎn)遠(yuǎn)小于進(jìn)程間切換所需要的時(shí)間。當(dāng)然,在具體的系統(tǒng)上,這個(gè)數(shù)據(jù)可能 會(huì)有較大的區(qū)別; 2)線程間方便的通信機(jī)制,由于同一進(jìn)程下的線程之間共享數(shù)據(jù)空間,所以一個(gè)線程的數(shù)據(jù)可以直接為其它線程所用,這不僅快捷,而且方便; 3)使多CPU系統(tǒng)更加有效。操作系統(tǒng)會(huì)保證當(dāng)線程數(shù)不大于CPU數(shù)目時(shí),不同的線程運(yùn)行于不同的CPU上; 4)改善程序結(jié)構(gòu)。一個(gè)既長(zhǎng)又復(fù)雜的進(jìn)程可以考慮分為多個(gè)線程,成為幾個(gè)獨(dú)立或半獨(dú)立的運(yùn)行部分,這樣的程序會(huì)利于理解和修改。

8.2 線程的缺點(diǎn)

1)調(diào)度時(shí), 要保存線程狀態(tài),頻繁調(diào)度,需要占用大量的機(jī)時(shí); 2)程序設(shè)計(jì)上容易出錯(cuò)(線程同步問題)。

9

多線程的優(yōu)缺點(diǎn)

9.1 多線程的優(yōu)點(diǎn)

1)無需跨進(jìn)程邊界;程序邏輯和控制方式簡(jiǎn)單; 2)所有線程可以直接共享內(nèi)存和變量等; 3)線程方式消耗的總資源比進(jìn)程方式好。

9.2 多線程的缺點(diǎn)

1)每個(gè)線程與主程序共用地址空間,受限于2GB地址空間; 2)線程之間的同步和加鎖控制比較麻煩;一個(gè)線程的崩潰可能影響到整個(gè)程序的穩(wěn)定性; 3)到達(dá)一定的線程數(shù)程度后,即使再增加CPU也無法提高性能,例如Windows Server 2003,大約是1500個(gè)左右的線程數(shù)就快到極限了(線程堆棧設(shè)定為1M),如果設(shè)定線程堆棧為2M,還達(dá)不到1500個(gè)線程總數(shù); 4)線程能夠提高的總性能有限,而且線程多了之后,線程本身的調(diào)度也是一個(gè)麻煩事兒,需要消耗較多的CPU 。

10

多進(jìn)程的優(yōu)缺點(diǎn)

10.1 多進(jìn)程的優(yōu)點(diǎn)

1)每個(gè)進(jìn)程互相獨(dú)立,不影響主程序的穩(wěn)定性,子進(jìn)程崩潰沒關(guān)系; 2)通過增加CPU,就可以容易擴(kuò)充性能; 3)可以盡量減少線程加鎖/解鎖的影響,極大提高性能,就算是線程運(yùn)行的模塊算法效率低也沒關(guān)系; 4)每個(gè)子進(jìn)程都有2GB地址空間和相關(guān)資源,總體能夠達(dá)到的性能上限非常大。

10.2 多進(jìn)程的缺點(diǎn)

1)邏輯控制復(fù)雜,需要和主程序交互; 2)需要跨進(jìn)程邊界,如果有大數(shù)據(jù)量傳送,就不太好,適合小數(shù)據(jù)量傳送、密集運(yùn)算 多進(jìn)程調(diào)度開銷比較大。 總結(jié):最好是多進(jìn)程和多線程結(jié)合,即根據(jù)實(shí)際的需要,每個(gè)CPU開啟一個(gè)子進(jìn)程,這個(gè)子進(jìn)程開啟多線程可以為若干同類型的數(shù)據(jù)進(jìn)行處理。當(dāng)然你也可以利用多線程+CPU+輪詢方式來解決問題……方法和手段是多樣的,關(guān)鍵是自己看起來實(shí)現(xiàn)方便有能夠滿足要求,代價(jià)也合適。 按照多個(gè)不同的維度(類別),來看看多線程和多進(jìn)程的對(duì)比(注:因?yàn)槭歉行缘谋容^,因此都是相對(duì)的,不是說一個(gè)好得不得了,另外一個(gè)差的無法忍受)。

對(duì)比類別 多進(jìn)程 多線程 總結(jié)
數(shù)據(jù)共享、同步 數(shù)據(jù)共享復(fù)雜,需要用IPC;數(shù)據(jù)是分開的,同步簡(jiǎn)單 因?yàn)楣蚕磉M(jìn)程數(shù)據(jù),數(shù)據(jù)共享簡(jiǎn)單,但也是因?yàn)檫@個(gè)原因?qū)е峦綇?fù)雜 各有優(yōu)勢(shì)
內(nèi)存、CPU 占用內(nèi)存多,切換復(fù)雜,CPU利用率低 占用內(nèi)存少,切換簡(jiǎn)單,CPU利用率高 線程占優(yōu)
創(chuàng)建銷毀、切換 創(chuàng)建銷毀、切換復(fù)雜,速度慢 創(chuàng)建銷毀、切換簡(jiǎn)單,速度很快 線程占優(yōu)
編程、調(diào)試 編程簡(jiǎn)單,調(diào)試簡(jiǎn)單 編程復(fù)雜,調(diào)試復(fù)雜 進(jìn)程占優(yōu)
可靠性 進(jìn)程間不會(huì)互相影響 一個(gè)線程掛掉將導(dǎo)致整個(gè)進(jìn)程掛掉 進(jìn)程占優(yōu)
分布式 適應(yīng)于多核、多機(jī)分布式;如果一臺(tái)機(jī)器不夠,擴(kuò)展到多臺(tái)機(jī)器比較簡(jiǎn)單 適應(yīng)于多核分布式 進(jìn)程占優(yōu)

其實(shí)沒有絕對(duì)的好與壞,只有哪個(gè)更加合適的問題。我們來看實(shí)際應(yīng)用中究竟如何判斷更加合適。 1)需要頻繁創(chuàng)建銷毀的優(yōu)先用線程 這種原則最常見的應(yīng)用就是Web服務(wù)器了,來一個(gè)連接建立一個(gè)線程,斷了就銷毀線程,要是用進(jìn)程,創(chuàng)建和銷毀的代價(jià)是很難承受的 2)需要進(jìn)行大量計(jì)算的優(yōu)先使用線程 所謂大量計(jì)算,當(dāng)然就是要耗費(fèi)很多CPU,切換頻繁了,這種情況下線程是最合適的。這種原則最常見的是圖像處理、算法處理。 3)強(qiáng)相關(guān)的處理用線程,弱相關(guān)的處理用進(jìn)程 什么叫強(qiáng)相關(guān)、弱相關(guān)?理論上很難定義,給個(gè)簡(jiǎn)單的例子就明白了。 一般的Server需要完成如下任務(wù):消息收發(fā)、消息處理?!跋⑹瞻l(fā)”和“消息處理”就是弱相關(guān)的任務(wù),而“消息處理”里面可能又分為“消息解碼”、“業(yè)務(wù)處理”,這兩個(gè)任務(wù)相對(duì)來說相關(guān)性就要強(qiáng)多了。因此“消息收發(fā)”和“消息處理”可以分進(jìn)程設(shè)計(jì),“消息解碼”、“業(yè)務(wù)處理”可以分線程設(shè)計(jì)。當(dāng)然這種劃分方式不是一成不變的,也可以根據(jù)實(shí)際情況進(jìn)行調(diào)整。 4)可能要擴(kuò)展到多機(jī)分布的用進(jìn)程,多核分布的用線程 5)都滿足需求的情況下,用你最熟悉、最拿手的方式 至于“數(shù)據(jù)共享、同步”、“編程、調(diào)試”、“可靠性”這幾個(gè)維度的所謂的“復(fù)雜、簡(jiǎn)單”應(yīng)該怎么取舍,我只能說:沒有明確的選擇方法。但我可以告訴你一個(gè)選擇原則:如果多進(jìn)程和多線程都能夠滿足要求,那么選擇你最熟悉、最拿手的那個(gè)。需要提醒的是:雖然我給了這么多的選擇原則,但實(shí)際應(yīng)用中基本上都是“進(jìn)程+線程”的結(jié)合方式,千萬不要真的陷入一種非此即彼的誤區(qū)。

11

多任務(wù)(多進(jìn)程)

現(xiàn)代操作系統(tǒng)比如Mac OS X,UNIX,Linux,Windows等,都是支持“多任務(wù)”的操作系統(tǒng)。 什么叫“多任務(wù)”呢?簡(jiǎn)單地說,就是操作系統(tǒng)可以同時(shí)運(yùn)行多個(gè)任務(wù)。打個(gè)比方,你一邊在用瀏覽器上網(wǎng),一邊在聽MP3,一邊在用Word寫論文,這就是多任務(wù),至少同時(shí)有3個(gè)任務(wù)正在運(yùn)行。還有很多任務(wù)悄悄地在后臺(tái)同時(shí)運(yùn)行著,只是桌面上沒有顯示而已。 現(xiàn)在,多核CPU已經(jīng)非常普及了,但是,即使過去的單核CPU,也可以執(zhí)行多任務(wù)。由于CPU執(zhí)行代碼都是順序執(zhí)行的,那么,單核CPU是怎么執(zhí)行多任務(wù)的呢? 其實(shí)操作系統(tǒng)輪流讓各個(gè)任務(wù)交替執(zhí)行,任務(wù)1執(zhí)行0.01秒,切換到任務(wù)2,任務(wù)2執(zhí)行0.01秒,再切換到任務(wù)3,執(zhí)行0.01秒……這樣反復(fù)執(zhí)行下去。表面上看,每個(gè)任務(wù)都是交替執(zhí)行的,但是,由于CPU的執(zhí)行速度實(shí)在是太快了,我們感覺就像所有任務(wù)都在同時(shí)執(zhí)行一樣。 真正的并行執(zhí)行多任務(wù)只能在多核CPU上實(shí)現(xiàn),但是,由于任務(wù)數(shù)量遠(yuǎn)遠(yuǎn)多于CPU的核心數(shù)量,所以,操作系統(tǒng)也會(huì)自動(dòng)把很多任務(wù)輪流調(diào)度到每個(gè)核心上執(zhí)行。 對(duì)于操作系統(tǒng)來說,一個(gè)任務(wù)就是一個(gè)進(jìn)程(Process),比如打開一個(gè)瀏覽器就是啟動(dòng)一個(gè)瀏覽器進(jìn)程,打開一個(gè)記事本就啟動(dòng)了一個(gè)記事本進(jìn)程,打開兩個(gè)記事本就啟動(dòng)了兩個(gè)記事本進(jìn)程,打開一個(gè)Word就啟動(dòng)了一個(gè)Word進(jìn)程。 有些進(jìn)程還不止同時(shí)干一件事,比如Word,它可以同時(shí)進(jìn)行打字、拼寫檢查、打印等事情。在一個(gè)進(jìn)程內(nèi)部,要同時(shí)干多件事,就需要同時(shí)運(yùn)行多個(gè)“子任務(wù)”,我們把進(jìn)程內(nèi)的這些 “子任務(wù)” 稱為線程(Thread)。 由于每個(gè)進(jìn)程至少要干一件事,所以,一個(gè)進(jìn)程至少有一個(gè)線程。當(dāng)然,像Word這種復(fù)雜的進(jìn)程可以有多個(gè)線程,多個(gè)線程可以同時(shí)執(zhí)行,多線程的執(zhí)行方式和多進(jìn)程是一樣的,也是由操作系統(tǒng)在多個(gè)線程之間快速切換,讓每個(gè)線程都短暫地交替運(yùn)行,看起來就像同時(shí)執(zhí)行一樣。當(dāng)然,真正地同時(shí)執(zhí)行多線程需要多核CPU才可能實(shí)現(xiàn)。

責(zé)任編輯:lq

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • cpu
    cpu
    +關(guān)注

    關(guān)注

    68

    文章

    11275

    瀏覽量

    224916
  • 多線程
    +關(guān)注

    關(guān)注

    0

    文章

    279

    瀏覽量

    21024
  • 數(shù)據(jù)結(jié)構(gòu)

    關(guān)注

    3

    文章

    573

    瀏覽量

    41580

原文標(biāo)題:線程、進(jìn)程、多線程、多進(jìn)程 和 多任務(wù) 它們有啥關(guān)系

文章出處:【微信號(hào):zhuyandz,微信公眾號(hào):FPGA之家】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏
加入交流群
微信小助手二維碼

掃碼添加小助手

加入工程師交流群

    評(píng)論

    相關(guān)推薦
    熱點(diǎn)推薦

    飛凌嵌入式ElfBoard-進(jìn)程之什么是進(jìn)程

    在Linux系統(tǒng)中,有些基本命令能夠查看到進(jìn)程的信息。例如ps、top、pgrep、pstree等;這些命令為用戶提供了查看和管理Linux進(jìn)程信息的多種功能。通過合理使用這些命令,用戶可以監(jiān)控
    發(fā)表于 03-02 08:49

    Linux進(jìn)程樹分析工具pstree詳解與實(shí)戰(zhàn)指南(另一視角優(yōu)化Linux系統(tǒng))

    在 Linux 系統(tǒng)開發(fā)與運(yùn)維中,理解進(jìn)程的運(yùn)行狀態(tài)和相互關(guān)系是排查問題、優(yōu)化性能的基礎(chǔ)。pstree 作為一款輕量高效的進(jìn)程樹可視化工具,能直觀展示系統(tǒng)中所有進(jìn)程的父子
    的頭像 發(fā)表于 02-04 16:21 ?711次閱讀
    Linux<b class='flag-5'>進(jìn)程</b>樹分析工具pstree詳解與實(shí)戰(zhàn)指南(另一視角優(yōu)化Linux系統(tǒng))

    飛凌嵌入式ElfBoard-進(jìn)程之什么是進(jìn)程

    ID,用戶ID,組ID以及終止?fàn)顟B(tài)等)。4.1.1 進(jìn)程和程序的區(qū)別程序是一個(gè)靜態(tài)的代碼集合,是一組指令的集合,用于執(zhí)行特定的任務(wù)。程序通常以文件的形式存在,存儲(chǔ)在硬盤、閃存或其他存儲(chǔ)介質(zhì)上。程序
    發(fā)表于 01-26 08:42

    進(jìn)程概念和特征

    進(jìn)程的概念   在多道程序環(huán)境下,允許多個(gè)程序并發(fā)執(zhí)行,此時(shí)它們將失去封閉性,并具有間斷性及不可再現(xiàn)性的特征。為此引入了進(jìn)程(Process)的概念,以便更好地描述和控制程序的并發(fā)執(zhí)行,實(shí)現(xiàn)操作系統(tǒng)
    發(fā)表于 01-15 06:39

    進(jìn)程通信

    空間一般都是獨(dú)立的,要想讓兩個(gè)用戶進(jìn)程共享空間必須通過特殊的系統(tǒng)調(diào)用實(shí)現(xiàn),而進(jìn)程內(nèi)的線程是自然共享進(jìn)程空間的。   消息傳遞   在消息傳遞系統(tǒng)中,
    發(fā)表于 01-15 06:16

    進(jìn)程的控制

    進(jìn)程控制的主要功能是對(duì)系統(tǒng)中的所有進(jìn)程實(shí)施有效的管理,它具有創(chuàng)建新進(jìn)程、撤銷已有進(jìn)程、實(shí)現(xiàn)進(jìn)程狀態(tài)轉(zhuǎn)換等功能。在操作系統(tǒng)中,一般把
    發(fā)表于 01-15 06:05

    【瑞薩FPB-RA6E2試用】【瑞薩FPB-RA6E2】RTOS(Real-Time Operating System,實(shí)時(shí)操作系統(tǒng))《線程》個(gè)人理解及項(xiàng)目實(shí)現(xiàn)

    :執(zhí)行完畢或被刪除。 ?? 1.4 RTOS與通用 OS(如 Linux)的區(qū)別 特性 RTOS 線程 Linux 進(jìn)程/線程 資源開銷 極?。↘B 級(jí)棧) 較大(MB 級(jí)虛擬內(nèi)存)
    發(fā)表于 01-14 11:50

    解析Linux的進(jìn)程、線程和協(xié)程

    系統(tǒng)的穩(wěn)定性和安全性。 (3)創(chuàng)建與銷毀:Linux使用fork()系統(tǒng)調(diào)用來創(chuàng)建新進(jìn)程,通過exit()來終止進(jìn)程。 線程(Thread) 線程
    發(fā)表于 12-22 11:00

    Linux多線程對(duì)比單線程的優(yōu)勢(shì)

    在Linux系統(tǒng)中,線程是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的最小單位。線程被包含在進(jìn)程之中,是進(jìn)程中的實(shí)際運(yùn)行單位。一個(gè)進(jìn)程可以擁有多個(gè)
    發(fā)表于 12-01 06:11

    電壓、電位、電勢(shì)和電平的區(qū)別關(guān)系

    在電學(xué)領(lǐng)域中,電壓、電位、電勢(shì)和電平是幾個(gè)密切相關(guān)的概念,它們既有區(qū)別又有聯(lián)系。理解這些概念的本質(zhì)及其相互關(guān)系,對(duì)于掌握電路分析和電子技術(shù)至關(guān)重要。下面將從定義、計(jì)算方法和實(shí)際應(yīng)用等方面,詳細(xì)闡述
    的頭像 發(fā)表于 11-24 07:37 ?1027次閱讀
    電壓、電位、電勢(shì)和電平的<b class='flag-5'>區(qū)別</b>與<b class='flag-5'>關(guān)系</b>

    線程與多處理有何區(qū)別

    多處理也稱為進(jìn)程,進(jìn)程是一個(gè)在自己的內(nèi)存空間中運(yùn)行的獨(dú)立程序。
    的頭像 發(fā)表于 09-16 14:21 ?548次閱讀

    【HZ-T536開發(fā)板免費(fèi)體驗(yàn)】—— linux創(chuàng)建線程

    線程進(jìn)程 一個(gè)進(jìn)程指的是一個(gè)正在執(zhí)行的應(yīng)用程序,而線程的功能是執(zhí)行應(yīng)用程序中的某個(gè)具體任務(wù)。線程具有傳統(tǒng)
    發(fā)表于 09-01 21:31

    Linux進(jìn)程狀態(tài)詳解

    進(jìn)程狀態(tài)是task_struct內(nèi)的一個(gè)整數(shù);進(jìn)行:進(jìn)程在調(diào)度隊(duì)列中,進(jìn)程的狀態(tài)都是running,阻塞:等待某種設(shè)備或者資源就緒。進(jìn)程是一個(gè)隊(duì)列,設(shè)備也是一個(gè)隊(duì)列,當(dāng)我們讀磁盤,讀網(wǎng)
    的頭像 發(fā)表于 04-01 09:46 ?1150次閱讀
    Linux<b class='flag-5'>進(jìn)程</b>狀態(tài)詳解

    進(jìn)程、線程、協(xié)程傻傻分不清?一文帶你徹底扒光它們的\"底褲\"!

    各位程序員朋友(和假裝懂技術(shù)的同事):如果你在面試時(shí)被問到:\"請(qǐng)用奶茶店類比進(jìn)程、線程和協(xié)程\",而你回答:\"進(jìn)程是老板,線程是員工,協(xié)程是兼職...\"
    發(fā)表于 03-26 09:27

    請(qǐng)問如何在Python中實(shí)現(xiàn)多線程與多進(jìn)程的協(xié)作?

    大家好!我最近在開發(fā)一個(gè)Python項(xiàng)目時(shí),需要同時(shí)處理多個(gè)任務(wù),且每個(gè)任務(wù)需要不同的計(jì)算資源。我想通過多線程和多進(jìn)程的組合來實(shí)現(xiàn)并發(fā),但遇到了一些問題。 具體來說,我有兩個(gè)任務(wù),一個(gè)是I/O密集型
    發(fā)表于 03-11 06:57