新聞中心
一個(gè)程序(比如:游戲)可以同時(shí)對(duì)應(yīng)幾個(gè)進(jìn)程,一個(gè)進(jìn)程對(duì)應(yīng)一個(gè)程序,而一個(gè)進(jìn)程可以有多個(gè)線程(至少有一個(gè)線程),很多多線程是模擬出來(lái)的,真正的多線程是指多個(gè)CPU,CPU在同一個(gè)時(shí)間只能執(zhí)行一個(gè)代碼,因?yàn)镃PU執(zhí)行速度很快就會(huì)有一種同時(shí)執(zhí)行的錯(cuò)覺(jué)。

創(chuàng)新互聯(lián)公司專業(yè)為企業(yè)提供興城網(wǎng)站建設(shè)、興城做網(wǎng)站、興城網(wǎng)站設(shè)計(jì)、興城網(wǎng)站制作等企業(yè)網(wǎng)站建設(shè)、網(wǎng)頁(yè)設(shè)計(jì)與制作、興城企業(yè)網(wǎng)站模板建站服務(wù),10年興城做網(wǎng)站經(jīng)驗(yàn),不只是建網(wǎng)站,更提供有價(jià)值的思路和整體網(wǎng)絡(luò)服務(wù)。
一、什么是進(jìn)程
進(jìn)程是資源(CPU、內(nèi)存等)分配的基本單位,它是程序執(zhí)行時(shí)的一個(gè)實(shí)例。程序運(yùn)行時(shí)系統(tǒng)就會(huì)創(chuàng)建一個(gè)進(jìn)程,并為它分配資源,然后把該進(jìn)程放入進(jìn)程就緒隊(duì)列,進(jìn)程調(diào)度器選中它的時(shí)候就會(huì)為它分配CPU時(shí)間,程序開(kāi)始真正運(yùn)行。進(jìn)程的優(yōu)點(diǎn)是提高CPU運(yùn)行效率,在同一時(shí)間內(nèi)執(zhí)行多個(gè)程序,即并發(fā)執(zhí)行。但是從嚴(yán)格上講,也不是絕對(duì)的同一時(shí)刻執(zhí)行多個(gè)程序,只不過(guò)CPU在執(zhí)行時(shí)通過(guò)時(shí)間片等調(diào)度算法不同進(jìn)程高速切換。進(jìn)程類似于人類,是被產(chǎn)生的,有或長(zhǎng)或短的有效生命,可以產(chǎn)生一個(gè)或多個(gè)子進(jìn)程,最終都要消亡的。每個(gè)子進(jìn)程都只有一個(gè)父進(jìn)程。在這里順帶提下,Linux里通過(guò)調(diào)用fork()函數(shù)產(chǎn)生子進(jìn)程。子進(jìn)程在創(chuàng)建時(shí),它幾乎和父進(jìn)程相同。它是從父進(jìn)程的地址空間copy過(guò)來(lái)的。盡管它們可以共享有程序代碼的頁(yè),但是它們各自有獨(dú)立的數(shù)據(jù)空間。對(duì)子進(jìn)程內(nèi)存的修改不會(huì)影響父進(jìn)程,反之亦然。
二、 什么是線程
線程是一條執(zhí)行路徑,是程序執(zhí)行時(shí)的最小單位,它是進(jìn)程的一個(gè)執(zhí)行流,是CPU調(diào)度和分派的基本單位,一個(gè)進(jìn)程可以由很多個(gè)線程組成,線程間共享進(jìn)程的所有資源,每個(gè)線程有自己的堆棧和局部變量。線程由CPU獨(dú)立調(diào)度執(zhí)行,在多CPU環(huán)境下就允許多個(gè)線程同時(shí)運(yùn)行。同樣多線程也可以實(shí)現(xiàn)并發(fā)操作,每個(gè)請(qǐng)求分配一個(gè)線程來(lái)處理。線程是一條可以執(zhí)行的路徑。多線程就是同時(shí)有多條執(zhí)行路徑在同時(shí)(并行)執(zhí)行。
三、線程與進(jìn)程的特點(diǎn)
(1)進(jìn)程特點(diǎn):
1:獨(dú)立性:進(jìn)程是系統(tǒng)中獨(dú)立存在的實(shí)體,它可以獨(dú)立擁有資源,每一個(gè)進(jìn)程都有自己獨(dú)立的地址空間,沒(méi)有進(jìn)程本身的運(yùn)行,用戶進(jìn)程不可以直接訪問(wèn)其他進(jìn)程的地址空間。
2:動(dòng)態(tài)性:進(jìn)程和程序的區(qū)別在于進(jìn)程是動(dòng)態(tài)的,進(jìn)程中有時(shí)間的概念,進(jìn)程具有自己的生命周期和各種不同的狀態(tài)。
3:并發(fā)性:多個(gè)進(jìn)程可以在單個(gè)處理器上并發(fā)執(zhí)行,互不影響。
(2)線程特點(diǎn)
1:輕型實(shí)體
線程中的實(shí)體單位基本上不擁有系統(tǒng)資源,只是有一點(diǎn)必不可少的、能保證獨(dú)立運(yùn)行的資源。線程的實(shí)體包括程序、數(shù)據(jù)和TCB。線程是動(dòng)態(tài)概念,他的動(dòng)態(tài)特性由線程控制塊TCB描述。
2:獨(dú)立調(diào)度和分派的基本單位
再多線程OS中,線程是能獨(dú)立運(yùn)行的基本單位,因而也是獨(dú)立調(diào)度和分派的基本單位。但由于線程很“輕”,故線程的切換非常迅速且開(kāi)銷小(在統(tǒng)一進(jìn)程中的)。
3:可并發(fā)執(zhí)行
在一個(gè)進(jìn)程中的多個(gè)線程之間,可以并發(fā)執(zhí)行,甚至允許在一個(gè)進(jìn)程中所有線程都能并發(fā)執(zhí)行;同樣,不同進(jìn)程中的線程也能并發(fā)執(zhí)行,充分利用和發(fā)揮了處理機(jī)與外圍設(shè)備并行工作的能力。
4:共享進(jìn)程資源
在同一進(jìn)程中的各個(gè)線程,都可以共享該進(jìn)程所擁有的資源,這首先表現(xiàn)在:所有線程都具有相同的地址空間(進(jìn)程的地址空間),這意味者,線程可以訪問(wèn)該地址空間的每一個(gè)虛地址;此外,還可以訪問(wèn)該進(jìn)程所擁有的已打開(kāi)文件、定時(shí)器、信號(hào)量機(jī)構(gòu)等。由于同一個(gè)進(jìn)程內(nèi)的線程共享內(nèi)存和文件,所以線程之間互相通信不必調(diào)用內(nèi)核。
四、進(jìn)程和線程的區(qū)別:
1、容易創(chuàng)建新線程。但是,創(chuàng)建新進(jìn)程需要重復(fù)父進(jìn)程。
2、線程可以控制同一進(jìn)程的其他線程。進(jìn)程無(wú)法控制兄弟進(jìn)程,只能控制其子進(jìn)程。
3、進(jìn)程擁有自己的內(nèi)存空間。線程使用進(jìn)程的內(nèi)存空間,且要和該進(jìn)程的其他線程共享這個(gè)空間;而不是在進(jìn)程中給每個(gè)線程單獨(dú)劃分一點(diǎn)空間。
4、(同一進(jìn)程中的)線程在共享內(nèi)存空間中運(yùn)行,而進(jìn)程在不同的內(nèi)存空間中運(yùn)行。
5、線程可以使用wait(),notify(),notifyAll()等方法直接與其他線程(同一進(jìn)程)通信;而,進(jìn)程需要使用“進(jìn)程間通信”(IPC)來(lái)與操作系統(tǒng)中的其他進(jìn)程通信。
以上就是關(guān)于大數(shù)據(jù)開(kāi)發(fā)基礎(chǔ)之JAVA線程進(jìn)程的基礎(chǔ)知識(shí),學(xué)以致用是大數(shù)據(jù)里面最好的學(xué)習(xí)方式,能讓你快速在行業(yè)中占領(lǐng)一席之地。
本文名稱:詳解Java線程與進(jìn)程
當(dāng)前路徑:http://fisionsoft.com.cn/article/cohgooo.html


咨詢
建站咨詢
