1囤官、進(jìn)程冬阳、線程區(qū)別
計(jì)算機(jī)的核心是CPU,它承擔(dān)了所有的計(jì)算任務(wù)党饮;而操作系統(tǒng)是計(jì)算機(jī)的管理者肝陪,它負(fù)責(zé)任務(wù)的調(diào)度、資源的分配和管理刑顺,統(tǒng)領(lǐng)整個(gè)計(jì)算機(jī)硬件氯窍;應(yīng)用程序則是具有某種功能的程序,程序是運(yùn)行于操作系統(tǒng)之上的蹲堂。
1)進(jìn)程
進(jìn)程是一個(gè)具有一定獨(dú)立功能的程序在一個(gè)數(shù)據(jù)集上的一次動(dòng)態(tài)執(zhí)行的過(guò)程狼讨,是操作系統(tǒng)進(jìn)行資源分配和調(diào)度的一個(gè)獨(dú)立單位,是應(yīng)用程序運(yùn)行的載體贯城。進(jìn)程是線程的容器熊楼。程序是指令、數(shù)據(jù)及其組織形式的描述,進(jìn)程是程序的實(shí)體鲫骗。
進(jìn)程一般由程序犬耻、數(shù)據(jù)集合和進(jìn)程控制塊三部分組成。PCB是進(jìn)程存在的唯一標(biāo)準(zhǔn)执泰。
a枕磁、程序用于描述進(jìn)程要完成的功能,是控制進(jìn)程執(zhí)行的指令集术吝;
b计济、數(shù)據(jù)集合是程序在執(zhí)行時(shí)所需要的數(shù)據(jù)和工作區(qū);
c排苍、程序控制塊(Program Control Block沦寂,簡(jiǎn)稱PCB),包含進(jìn)程的描述信息和控制信息淘衙,是進(jìn)程存在的唯一標(biāo)志传藏。
2)線程
線程,有時(shí)被稱為輕量級(jí)進(jìn)程(Lightweight Process彤守,LWP)毯侦,是操作系統(tǒng)調(diào)度(CPU調(diào)度)執(zhí)行的最小單位。它被包含在進(jìn)程之中具垫,是進(jìn)程中的實(shí)際運(yùn)作單位侈离。一條線程指的是進(jìn)程中一個(gè)單一順序的控制流,一個(gè)進(jìn)程中可以并發(fā)多個(gè)線程筝蚕,每條線程并行執(zhí)行不同的任務(wù)卦碾。
線程的好處:
a、易于調(diào)度饰及。
b蔗坯、提高并發(fā)性。通過(guò)線程可方便有效地實(shí)現(xiàn)并發(fā)性燎含。進(jìn)程可創(chuàng)建多個(gè)線程來(lái)執(zhí)行同一程序的不同部分宾濒。
c、開(kāi)銷少屏箍。創(chuàng)建線程比創(chuàng)建進(jìn)程要快绘梦,所需開(kāi)銷很少。在創(chuàng)建或撤消進(jìn)程時(shí)赴魁,由于系統(tǒng)都要為之分配和回收資源卸奉,導(dǎo)致系統(tǒng)的開(kāi)銷明顯大于創(chuàng)建或撤消線程時(shí)的開(kāi)銷。
d颖御、利于充分發(fā)揮多處理器的功能榄棵。通過(guò)創(chuàng)建多線程進(jìn)程(即一個(gè)進(jìn)程可具有兩個(gè)或更多個(gè)線程),每個(gè)線程在一個(gè)處理器上運(yùn)行,從而實(shí)現(xiàn)應(yīng)用程序的并發(fā)性疹鳄,使每個(gè)處理器都得到充分運(yùn)行拧略。
總結(jié):a、進(jìn)程是資源分配和調(diào)度的基本單位瘪弓;線程是調(diào)度(CPU調(diào)度)執(zhí)行的最小單位垫蛆。
b、一個(gè)線程只可以屬于一個(gè)進(jìn)程腺怯,但一個(gè)進(jìn)程能包含多個(gè)線程袱饭。
c、資源分配給進(jìn)程呛占,同一進(jìn)程的所有線程共享該進(jìn)程的所有資源虑乖。
d、線程的開(kāi)銷或代價(jià)比進(jìn)程的小栓票。
3)進(jìn)程間通信的方式
a决左、管道(pipe)及有名管道(named pipe):
管道可用于具有親緣關(guān)系的父子進(jìn)程間的通信愕够,有名管道除了具有管道所具有的功能外走贪,它還允許無(wú)親緣關(guān)系進(jìn)程間的通信。
b惑芭、信號(hào)(signal):
信號(hào)是在軟件層次上對(duì)中斷機(jī)制的一種模擬坠狡,它是比較復(fù)雜的通信方式,用于通知進(jìn)程有某事件發(fā)生遂跟,一個(gè)進(jìn)程收到一個(gè)信號(hào)與處理器收到一個(gè)中斷請(qǐng)求效果上可以說(shuō)是一致的逃沿。
c、消息隊(duì)列(message queue):
消息隊(duì)列是消息的鏈接表幻锁,它克服了上兩種通信方式中信號(hào)量有限的缺點(diǎn)凯亮,具有寫權(quán)限得進(jìn)程可以按照一定得規(guī)則向消息隊(duì)列中添加新信息;對(duì)消息隊(duì)列有讀權(quán)限得進(jìn)程則可以從消息隊(duì)列中讀取信息哄尔。
d假消、共享內(nèi)存(shared memory):
可以說(shuō)這是最有用的進(jìn)程間通信方式。它使得多個(gè)進(jìn)程可以訪問(wèn)同一塊內(nèi)存空間岭接,不同進(jìn)程可以及時(shí)看到對(duì)方進(jìn)程中對(duì)共享內(nèi)存中數(shù)據(jù)得更新富拗。這種方式需要依靠某種同步操作,如互斥鎖和信號(hào)量等鸣戴。
e啃沪、信號(hào)量(semaphore):
主要作為進(jìn)程之間及同一種進(jìn)程的不同線程之間得同步和互斥手段。
f窄锅、套接字(socket)创千;
這是一種更為一般得進(jìn)程間通信機(jī)制,它可用于網(wǎng)絡(luò)中不同機(jī)器之間的進(jìn)程間通信,應(yīng)用非常廣泛追驴。
4)線程間的通信方式
a寓涨、同步。
b氯檐、wait/notify機(jī)制戒良。
c、共享內(nèi)存冠摄。
d糯崎、管道通信機(jī)制。
e河泳、信號(hào)量
2沃呢、死鎖
產(chǎn)生死鎖必須同時(shí)滿足以下的四個(gè)條件,只要其中一條件不滿足拆挥,死鎖就不會(huì)發(fā)生薄霜。
a、互斥條件:就是一個(gè)資源只能有一個(gè)進(jìn)程占有纸兔,不可以被兩個(gè)或者多個(gè)進(jìn)程占有惰瓜;
b、不可搶占條件:進(jìn)程已經(jīng)獲得的資源在未使用完之前汉矿,不可以被搶占崎坊,只能在使用完之后自己釋放;
c洲拇、請(qǐng)求和保持條件:進(jìn)程自己已經(jīng)至少保持一個(gè)資源奈揍,又請(qǐng)求其他資源,但是這個(gè)資源被其他進(jìn)程占有赋续,而且又不釋放自己已經(jīng)占有的資源
d男翰、循環(huán)等待條件:發(fā)生死鎖時(shí),必定會(huì)形成一個(gè)進(jìn)程資源的循環(huán)等待鏈纽乱。進(jìn)程集合{p1蛾绎,p2,p3}中迫淹,p1請(qǐng)求p2占有的資源秘通,p2請(qǐng)求p3占有的資源,p3請(qǐng)求p1占有的資源敛熬。