進程和線程的區(qū)別和聯(lián)系
進程和線程
- 進程
一個在內存中運行的應用程序,每個進程都有自己獨立的一塊內存空間,一個進程可以有多個線程,比如在windows上,一個運行的xx.exe就是一個進程。 - 線程
進程中的一個執(zhí)行任務(控制單元),負責進程中程序的執(zhí)行。一個進程至少有一個線程,一個進程可以運行多個線程,多個線程可以共享數(shù)據。
與進程不同的是同類的多個線程共享進程的堆和方法區(qū)資源,但每個線程有自己的程序計數(shù)器、虛擬機棧、和本地方法棧,所以系統(tǒng)在產生一個線程,或者在各個線程之間作切換工作時,負擔要比進程小的多,線程也被稱為輕量級進程。
進程和線程的區(qū)別總結
線程具有很多傳統(tǒng)進程所具有的特征,故又稱為輕型進程或者進程元;而把傳統(tǒng)的進程稱為重型進程,他相當于只有一個線程的任務。在引入了線程的操作系統(tǒng)中,通常一個進程都有若干個線程,至少包含一個線程。
- 根本區(qū)別:進程是操作系統(tǒng)資源分配的基本單位,而線程是處理器任務調度和執(zhí)行的基本單位。
- 資源開銷:每個線程都有獨立的代碼和數(shù)據空間(程序上下文),程序之間的切換會有較大的開銷;同一類線程之間共享 代碼和數(shù)據空間,每個線程都有自己 獨立的運行棧和程序技術器,線程之間的開銷小。
- 包含關系:如果一個進程內有多個線程,則執(zhí)行過程不是一條線的,而是多個線程共同完成的;線程是進程的一部分,所以線程也被稱為輕量級進程。
- 內存分配:同一進程的線程共享本進程的地址空間和資源,而進程之間的地址空間和資源是相互獨立的。
- 影響關系:一個進程崩潰后,在保護模式下不會對其他進程產生影響,但是一個線程崩潰,整個進程都死掉。
- 執(zhí)行過程:每個獨立的進程有程序運行的入口,順序執(zhí)行序列和 程序出口,但是線程不能獨立執(zhí)行,必須依存在應用程序中,由應用程序提供多個線程執(zhí)行控制,兩者均可并發(fā)執(zhí)行。