???? 進程亿昏,常被定義為程序的執(zhí)行浑测,可以把一個進程看成一個獨立的程序,在內存中有其完備的數據空間和代碼空間赎败。一個進程所擁有的數據和變量只屬于他自己秕衙。
???????? 線程,某一進程中一路單獨運行的程序僵刮。也就是線程存在于進程之中据忘,一個進程由一個或多個線程構成,各線程共享相同的代碼和全局數據搞糕,但各有自己的堆棧勇吊。由于堆棧是每個線程一個,因此局部變量對每一線程來說是私有的窍仰。由于所有線程共享同樣的代碼和全局數據汉规,他們比進程更緊密,線程間的相互作用更容易驹吮,因為他們本身有某些供通信用的共享內存:進程的全局數據针史。
一個進程和一個線程最顯著的區(qū)別是:線程有自己的全局數據晶伦。線程存在于進程中,因此一個進程的全局變量由所有的線程共享。由于線程共享同樣的系統(tǒng)區(qū)域,操作系統(tǒng)分配給一個進程的資源對該進程的所有線程都是可用的,正如全局數據可供所有線程使用一樣
進程概念?
進程是表示資源分配的基本單位啄枕,又是調度運行的基本單位婚陪。例如,用戶運行自己的程序射亏,系統(tǒng)就創(chuàng)建一個進程近忙,并為它分配資源,包括各種表格智润、內存空間及舍、磁盤空間、I/O設備等窟绷。然后锯玛,把該進程放人進程的就緒隊列。進程調度程序選中它兼蜈,為它分配CPU以及其它有關資源攘残,該進程才真正運行。所以为狸,進程是系統(tǒng)中的并發(fā)執(zhí)行的單位歼郭。?
在Mac、Windows NT等采用微內核結構的操作系統(tǒng)中辐棒,進程的功能發(fā)生了變化:它只是資源分配的單位病曾,而不再是調度運行的單位。在微內核系統(tǒng)中漾根,真正調度運行的基本單位是線程泰涂。因此,實現并發(fā)功能的單位是線程辐怕。
線程概念?
線程是進程中執(zhí)行運算的最小單位逼蒙,亦即執(zhí)行處理機調度的基本單位。如果把進程理解為在邏輯上操作系統(tǒng)所完成的任務寄疏,那么線程表示完成該任務的許多可能的子任務之一是牢。例如,假設用戶啟動了一個窗口中的數據庫應用程序陕截,操作系統(tǒng)就將對數據庫的調用表示為一個進程驳棱。假設用戶要從數據庫中產生一份工資單報表,并傳到一個文件中艘策,這是一個子任務蹈胡;在產生工資單報表的過程中渊季,用戶又可以輸人數據庫查詢請求朋蔫,這又是一個子任務罚渐。這樣,操作系統(tǒng)則把每一個請求――工資單報表和新輸人的數據查詢表示為數據庫進程中的獨立的線程驯妄。線程可以在處理器上獨立調度執(zhí)行荷并,這樣,在多處理器環(huán)境下就允許幾個線程各自在單獨處理器上進行青扔。操作系統(tǒng)提供線程就是為了方便而有效地實現這種并發(fā)性?
引入線程的好處?
(1)易于調度源织。?
(2)提高并發(fā)性。通過線程可方便有效地實現并發(fā)性微猖。進程可創(chuàng)建多個線程來執(zhí)行同一程序的不同部分谈息。?
(3)開銷少。創(chuàng)建線程比創(chuàng)建進程要快凛剥,所需開銷很少侠仇。。?
(4)利于充分發(fā)揮多處理器的功能犁珠。通過創(chuàng)建多線程進程(即一個進程可具有兩個或更多個線程)逻炊,每個線程在一個處理器上運行,從而實現應用程序的并發(fā)性犁享,使每個處理器都得到充分運行余素。
?
進程和線程的關系?
(1)一個線程只能屬于一個進程,而一個進程可以有多個線程炊昆,但至少有一個線程桨吊。?
(2)資源分配給進程,同一進程的所有線程共享該進程的所有資源窑眯。?
(3)處理機分給線程屏积,即真正在處理機上運行的是線程。?
(4)線程在執(zhí)行過程中磅甩,需要協(xié)作同步炊林。不同進程的線程間要利用消息通信的辦法實現同步。