當(dāng)前位置:首頁 > 嵌入式培訓(xùn) > 嵌入式學(xué)習(xí) > 講師博文 > 淺談進(jìn)程線程的區(qū)別
進(jìn)程間的通信包括有管道(無名管道和有名管道)、消息隊(duì)列、共享內(nèi)存、信號量、信號、套接字。
線程間資源保護(hù)機(jī)制包括:無名信號量、互斥鎖、條件變量。
線程是指進(jìn)程內(nèi)的一個執(zhí)行單元,也是進(jìn)程內(nèi)的可調(diào)度實(shí)體.與進(jìn)程的區(qū)別如下:
(1)地址空間:進(jìn)程內(nèi)的一個執(zhí)行單元;進(jìn)程至少有一個線程;它們共享進(jìn)程的地址空間;而進(jìn)程有自己獨(dú)立的地址空間;
(2)資源擁有:進(jìn)程是資源分配和擁有的單位,同一個進(jìn)程內(nèi)的線程共享進(jìn)程的資源;
(3)線程是處理器調(diào)度的基本單位,但進(jìn)程不是;
(4)二者均可并發(fā)執(zhí)行。
進(jìn)程和線程都是由操作系統(tǒng)所體會的程序運(yùn)行的基本單元,系統(tǒng)利用該基本單元實(shí)現(xiàn)系統(tǒng)對應(yīng)用的并發(fā)性。進(jìn)程和線程的區(qū)別在于:
簡而言之,一個程序至少有一個進(jìn)程,一個進(jìn)程至少有一個線程。
線程的劃分尺度小于進(jìn)程,使得多線程程序的并發(fā)性高。
另外,進(jìn)程在執(zhí)行過程中擁有獨(dú)立的內(nèi)存單元,而多個線程共享內(nèi)存,從而極大地提高了程序的運(yùn)行效率。
線程在執(zhí)行過程中與進(jìn)程也是有區(qū)別的。每個獨(dú)立的線程有一個程序運(yùn)行的入口、順序執(zhí)行序列和程序的出口。但是線程不能夠獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個線程執(zhí)行控制。
從邏輯角度來看,多線程的意義在于一個應(yīng)用程序中,有多個執(zhí)行部分可以同時執(zhí)行。但操作系統(tǒng)并沒有將多個線程看做多個獨(dú)立的應(yīng)用,來實(shí)現(xiàn)進(jìn)程的調(diào)度和管理以及資源分配。這就是進(jìn)程和線程的重要區(qū)別。
進(jìn)程是具有一定獨(dú)立功能的程序關(guān)于某個數(shù)據(jù)集合上的一次運(yùn)行活動,進(jìn)程是系統(tǒng)進(jìn)行資源分配一個獨(dú)立單位。
線程是進(jìn)程的一個實(shí)體,是CPU調(diào)度和分派的基本單位,它是比進(jìn)程更小的能獨(dú)立運(yùn)行的基本單位。線程自己基本上不擁有系統(tǒng)資源,只擁有一點(diǎn)在運(yùn)行中必不可少的資源(如程序計(jì)數(shù)器,一組寄存器和棧),但是它可與同屬一個進(jìn)程的其他的線程共享進(jìn)程所擁有的全部資源。
一個線程可以創(chuàng)建和撤銷另一個線程;同一個進(jìn)程中的多個線程之間可以并發(fā)執(zhí)行。