進程對于有一點會玩電腦的朋友都知道,我們打開任務管理器就可以看到很多進程,這些進程有些是系統的,有些是第三方軟件的,那么還有一個線程大家又知道是什么嗎?進程和線程的區別,兩者又有什么關系呢?下面KK小編就帶大家一起來學習一下關于進程,線程的相關知識。
進程是什么?
1、進程中可以包括有多個線程,也可以只有一個線程,進程與進程之間是相對比較獨立的。
2、進程中有一個邏輯內存,每個進程都會有分配到一個獨立的內存空間,還分配了一個文件/網絡句柄,句柄類似一個標識符,所有的進程所或多或少都有一定的句柄數的引用,句柄實際上是一個指針,指向一塊包含具體信息數據的內存,所以句柄是當你要訪問該進程時取得的,使用完必須釋放。(打個比方,我要使用redis需要打開6379端口,這個時候需要訪問句柄,獲取到內存地址去訪問獲取對應的資源來執行該進程)
3、一個進程可以擁有多個句柄數目,但是只有一個進程ID
4、進程不同時刻所引用的句柄數目是不一定的
線程是什么?
1、線程中有一個棧內存(很多人把它稱為堆棧),主要用來存儲局部變量資源或者內存地址
2、還有一個PC塊,主要是存儲下一條執行指令的地址,PC是指向一塊共同的內存(進程里面的被系統分配到的邏輯內存)。
3、TCS :ThreadLocalStorage 主要存儲線程自己定義的變量,不想和其他線程進行共享,理解為線程的私有變量。
4、線程共享進程的資源主要有:進程代碼塊、進程的全局和靜態變量、進程打開的文件描述符、信號的處理器、進程當前的目錄、進程ID、進程組ID。
進程和線程的區別
根本區別:進程是操作系統資源分配的基本單位,而線程是任務調度和執行的基本單位
在開銷方面:每個進程都有獨立的代碼和數據空間(程序上下文),程序之間的切換會有較大的開銷;線程可以看做輕量級的進程,同一類線程共享代碼和數據空間,每個線程都有自己獨立的運行棧和程序計數器(PC),線程之間切換的開銷小。
所處環境:在操作系統中能同時運行多個進程(程序);而在同一個進程(程序)中有多個線程同時執行(通過CPU調度,在每個時間片中只有一個線程執行)
內存分配方面:系統在運行的時候會為每個進程分配不同的內存空間;而對線程而言,除了CPU外,系統不會為線程分配內存(線程所使用的資源來自其所屬進程的資源),線程組之間只能共享資源。
包含關系:凡是進程必須有并且至少有一個線程,只有一個線程的話我們可以看做是單線程,如果一個進程內有多個線程,則執行過程不是一條線的,而是多條線(線程)共同完成的;線程是進程的一部分,所以線程也被稱為輕權進程或者輕量級進程。