進(jìn)程與線程
【摘要】 進(jìn)程是操作系統(tǒng)資源分配的基本單位,而線程是任務(wù)調(diào)度和執(zhí)行的基本單位。進(jìn)程擁有獨(dú)立的內(nèi)存空間,線程則共享所在進(jìn)程中的內(nèi)存空間。進(jìn)程之間切換開銷較大,而線程間切換開銷較小。程序是一個靜態(tài)指令的集合,而進(jìn)程是一個正在系統(tǒng)中活動的指令集合。
一、進(jìn)程的定義
維基百科 In computing, a process is the instance of a computer program that is being executed. It contains the program code and its activity. Depending on the operating system (OS), a process may be made up of multiple threads of execution that execute instructions concurrently.
在計算中,進(jìn)程是正在執(zhí)行的計算機(jī)程序的實(shí)例。它包含程序代碼及其活動。根據(jù)操作系統(tǒng)(OS)的不同,進(jìn)程可以由多個執(zhí)行線程組成,這些執(zhí)行線程同時執(zhí)行指令。
百度文庫 進(jìn)程(Process)是計算機(jī)中的程序關(guān)于某數(shù)據(jù)集合上的一次運(yùn)行活動,是系統(tǒng)進(jìn)行資源分配和調(diào)度的基本單位,是操作系統(tǒng)結(jié)構(gòu)的基礎(chǔ)。在早期面向進(jìn)程設(shè)計的計算機(jī)結(jié)構(gòu)中,進(jìn)程是程序的基本執(zhí)行實(shí)體;在當(dāng)代面向線程設(shè)計的計算機(jī)結(jié)構(gòu)中,進(jìn)程是線程的容器。程序是指令、數(shù)據(jù)及其組織形式的描述,進(jìn)程是程序的實(shí)體。
二、 線程的定義
維基百科 In computer science, a thread of execution is the smallest sequence of programmed instructions that can be managed independently by a scheduler, which is typically a part of the operating system.
在計算機(jī)科學(xué)中,執(zhí)行線程是可由調(diào)度程序獨(dú)立管理的最小程序指令序列,調(diào)度程序通常是操作系統(tǒng)的一部分。
百度文庫 線程(Thread)是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的最小單位。它被包含在進(jìn)程之中,是進(jìn)程中的實(shí)際運(yùn)作單位。一條線程指的是進(jìn)程中一個單一順序的控制流,一個進(jìn)程中可以并發(fā)多個線程,每條線程并行執(zhí)行不同的任務(wù)。在Unix System V及SunOS中也被稱為輕量進(jìn)程(lightweight processes),但輕量進(jìn)程更多指內(nèi)核線程(kernel thread),而把用戶線程(user thread)稱為線程。
三、 線程與進(jìn)程
進(jìn)程是操作系統(tǒng)資源分配的基本單位,而線程是任務(wù)調(diào)度和執(zhí)行的基本單位
線程和進(jìn)程的實(shí)現(xiàn)在操作系統(tǒng)之間有所不同,但在大多數(shù)情況下,線程是進(jìn)程的一個組件。進(jìn)程是操作系統(tǒng)資源分配的基本單位,而線程是任務(wù)調(diào)度和執(zhí)行的基本單位。在操作系統(tǒng)中能同時運(yùn)行多個進(jìn)程;而在同一個進(jìn)程中有多個線程同時執(zhí)行(通過CPU調(diào)度,在每個時間片中只有一個線程執(zhí)行)。
進(jìn)程擁有獨(dú)立的內(nèi)存空間,線程則共享所在進(jìn)程中的內(nèi)存空間
進(jìn)程是系統(tǒng)中獨(dú)立存在的實(shí)體,它可以擁有自己獨(dú)立的資源,系統(tǒng)在運(yùn)行的時候會為每個進(jìn)程分配不同的內(nèi)存空間,所以每一個進(jìn)程都擁有自己私有的內(nèi)存空間。在沒有經(jīng)過進(jìn)程本身允許的情況下,一個用戶的進(jìn)程不可以直接訪問其它進(jìn)程的內(nèi)存空間。而對線程而言,除了CPU外,系統(tǒng)不會為線程分配內(nèi)存(線程所使用的資源來自其所屬進(jìn)程的資源),一個進(jìn)程中的多個線程之間只能共享進(jìn)程的資源。而不同的進(jìn)程不共享這些資源。
進(jìn)程之間切換開銷較大,而線程間切換開銷較小
每個進(jìn)程都有獨(dú)立的數(shù)據(jù)空間(程序上下文),進(jìn)程之間的切換會有較大的開銷;線程可以看做輕量級的進(jìn)程,同一類線程共享代碼和數(shù)據(jù)空間,每個線程都有自己獨(dú)立的運(yùn)行棧和程序計數(shù)器(PC),線程之間切換的開銷小。
程序是一個靜態(tài)指令的集合,而進(jìn)程是一個正在系統(tǒng)中活動的指令集合
進(jìn)程與程序的區(qū)別在于,程序只是一個靜態(tài)的指令集合,而進(jìn)程是一個正在系統(tǒng)中活動的指令集合。在進(jìn)程中加入了時間的概念。進(jìn)程具有自己的生命周期和各種不同的狀態(tài),這寫概念在程序中是不具備的。