線程的引入:例如,有一個(gè)Web服務(wù)器要進(jìn)程的方式并發(fā)地處理來自不同用戶的網(wǎng)頁訪問請(qǐng)求的話,可以創(chuàng)建父進(jìn)程和多個(gè)子進(jìn)程的方式來進(jìn)行處理,但是創(chuàng)建一個(gè)進(jìn)程要花費(fèi)較大的系統(tǒng)開銷和占用較多的資源。除外,這些不同的用戶子進(jìn)程在執(zhí)行的時(shí)候涉及到進(jìn)程上下文切換,上下文切換是一個(gè)復(fù)雜的過程。所以,為了減少進(jìn)程切換和創(chuàng)建的開銷,提高執(zhí)行效率和節(jié)省資源,人們?cè)诓僮飨到y(tǒng)中引入了"線程(thread)"的概念。
進(jìn)程的作用和定義:進(jìn)程是為了提高CPU的執(zhí)行效率,減少因?yàn)槌绦虻却龓淼腃PU空轉(zhuǎn)以及其他計(jì)算機(jī)軟硬件資源的浪費(fèi)而提出來的。進(jìn)程是為了完成用戶任務(wù)所需要的程序的一次執(zhí)行過程和為其分配資源的一個(gè)基本單位,是一個(gè)具有獨(dú)立功能的程序段對(duì)某個(gè)數(shù)據(jù)集的一次執(zhí)行活動(dòng)。
線程和進(jìn)程的區(qū)別:
1、線程是進(jìn)程的一部分,所以線程有的時(shí)候被稱為是輕權(quán)進(jìn)程或者輕量級(jí)進(jìn)程。
2、一個(gè)沒有線程的進(jìn)程是可以被看作單線程的,如果一個(gè)進(jìn)程內(nèi)擁有多個(gè)進(jìn)程,進(jìn)程的執(zhí)行過程不是一條線(線程)的,而是多條線(線程)共同完成的。
3、系統(tǒng)在運(yùn)行的時(shí)候會(huì)為每個(gè)進(jìn)程分配不同的內(nèi)存區(qū)域,但是不會(huì)為線程分配內(nèi)存(線程所使用的資源是它所屬的進(jìn)程的資源),線程組只能共享資源。那就是說,出了CPU之外(線程在運(yùn)行的時(shí)候要占用CPU資源),計(jì)算機(jī)內(nèi)部的軟硬件資源的分配與線程無關(guān),線程只能共享它所屬進(jìn)程的資源。
4、與進(jìn)程的控制表PCB相似,線程也有自己的控制表TCB,但是TCB中所保存的線程狀態(tài)比PCB表中少多了。
5、進(jìn)程是系統(tǒng)所有資源分配時(shí)候的一個(gè)基本單位,擁有一個(gè)完整的虛擬空間地址,并不依賴線程而獨(dú)立存在。
進(jìn)程與程序的區(qū)別:
程序是一組指令的集合,它是靜態(tài)的實(shí)體,沒有執(zhí)行的含義。而進(jìn)程是一個(gè)動(dòng)態(tài)的實(shí)體,有自己的生命周期。一般說來,一個(gè)進(jìn)程肯定與一個(gè)程序相對(duì)應(yīng),并且只有一個(gè),但是一個(gè)程序可以有多個(gè)進(jìn)程,或者一個(gè)進(jìn)程都沒有。除此之外,進(jìn)程還有并發(fā)性和交往性。簡單地說,進(jìn)程是程序的一部分,程序運(yùn)行的時(shí)候會(huì)產(chǎn)生進(jìn)程。
總結(jié):
線程是進(jìn)程的一部分,進(jìn)程是程序的一部分。
題:http://zhidao.baidu.com/question/42875356.html?fr=qrl
http://jsjedu.hxu.edu.cn/os/zy/fy1/xt2.htm
http://www1.nttvu.edu.cn/ntddnew/classweb/article.asp?classid=46&id=416
轉(zhuǎn)自 http://www.javaeye.com/topic/271229