成人午夜视频全免费观看高清-秋霞福利视频一区二区三区-国产精品久久久久电影小说-亚洲不卡区三一区三区一区

詳解Java線程與進程的區(qū)別

這篇文章主要講解了“詳解Java線程與進程的區(qū)別”,文中的講解內(nèi)容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“詳解Java線程與進程的區(qū)別”吧!

網(wǎng)站建設哪家好,找創(chuàng)新互聯(lián)!專注于網(wǎng)頁設計、網(wǎng)站建設、微信開發(fā)、微信小程序定制開發(fā)、集團企業(yè)網(wǎng)站建設等服務項目。為回饋新老客戶創(chuàng)新互聯(lián)還提供了右玉免費建站歡迎大家使用!

 一、線程與進程的區(qū)別

先簡單說說線程與進程的概念:

(1)進程是指一個內(nèi)存中運行的應用程序,比如在Windows系統(tǒng)中,一個運行的exe就是一個進程。

(2)線程是指進程中的一個執(zhí)行流程。

區(qū)別:

一個程序至少有一個進程,而一個進程至少有一個線程。一個應用程序可以同時啟動多個進程。例如對于IE瀏覽器程序,每打開一個IE瀏覽器窗口,就啟動了一個新的進程。而線程則是指進程中的一個執(zhí)行流程,一個進程可以有多個線程,每個線程分別執(zhí)行不同的任務,當進程內(nèi)的多個線程同時運行時,這種運行方式就被稱為并發(fā)運行。

另外,線程與進程還有一個非常重要的區(qū)別:每個進程在執(zhí)行過程中都擁有獨立的內(nèi)存單元,而同一個進程中的多個線程則共享內(nèi)存,從而極大地提高了程序的運行效率。

二、對多線程并發(fā)的理解

多線程并發(fā)只是表面和感覺上的并發(fā),并不是實質(zhì)上的并發(fā)。一個線程要運行,它必須占有CPU,而我們目前用的計算機大多都是單CPU的,所以一次最多只能有一個線程獲取CPU并運行。

多線程的實質(zhì)是“***限度地利用CPU資源”,當某一個線程的處理不需要占用CPU而只需要和I/O等資源打交道時,讓其他線程有機會獲得CPU資源。這有點類似于“統(tǒng)籌方法”,例如讓你打掃房子和燒水,要在最短的時間內(nèi)做好這兩件事,你一定會想到先把水燒上,然后在等水燒開的空閑時間中去打掃房子,而不是先打掃好了再去燒水,也不是先燒好了再去打掃,這個例子里面,你是那個唯一的CPU,而燒水和打掃就是兩個線程。

雖然CPU只有一個,但是它在多個線程之間頻繁切換,當切換的頻率高到一定程度時,我們就感覺所有的線程在同時運行,于是感覺這多個線程是并發(fā)的。因此,并發(fā)并不是真的指多個線程同時運行,它僅僅只是形容一種現(xiàn)象。就好像說有些人是“鐵人”一樣,僅僅只是用于形容某個人不怕苦不怕累,像個“鐵人”。

1.  并發(fā):在操作系統(tǒng)中,是指一個時間段中有幾個程序都處于已啟動運行到運行完畢之間,且這幾個程序都是在同一個處理機上運行。其中兩種并發(fā)關(guān)系分別是同步和互斥

2. 互斥:進程間相互排斥的使用臨界資源的現(xiàn)象,就叫互斥。

3.  同步:進程之間的關(guān)系不是相互排斥臨界資源的關(guān)系,而是相互依賴的關(guān)系。進一步的說明:就是前一個進程的輸出作為后一個進程的輸入,當***個進程沒有輸出時第二個進程必須等待。具有同步關(guān)系的一組并發(fā)進程相互發(fā)送的信息稱為消息或事件。

其中并發(fā)又有偽并發(fā)和真并發(fā),偽并發(fā)是指單核處理器的并發(fā),真并發(fā)是指多核處理器的并發(fā)。

4.  并行:在單處理器中多道程序設計系統(tǒng)中,進程被交替執(zhí)行,表現(xiàn)出一種并發(fā)的外部特種;在多處理器系統(tǒng)中,進程不僅可以交替執(zhí)行,而且可以重疊執(zhí)行。在多處理器上的程序才可實現(xiàn)并行處理。從而可知,并行是針對多處理器而言的。并行是同時發(fā)生的多個并發(fā)事件,具有并發(fā)的含義,但并發(fā)不一定并行,也亦是說并發(fā)事件之間不一定要同一時刻發(fā)生。

5. 多線程:多線程是程序設計的邏輯層概念,它是進程中并發(fā)運行的一段代碼。多線程可以實現(xiàn)線程間的切換執(zhí)行。

6.  異步:異步和同步是相對的,同步就是順序執(zhí)行,執(zhí)行完一個再執(zhí)行下一個,需要等待、協(xié)調(diào)運行。異步就是彼此獨立,在等待某事件的過程中繼續(xù)做自己的事,不需要等待這一事件完成后再工作。線程就是實現(xiàn)異步的一個方式。異步是讓調(diào)用方法的主線程不需要同步等待另一線程的完成,從而可以讓主線程干其它的事情。

異步和多線程并不是一個同等關(guān)系,異步是最終目的,多線程只是我們實現(xiàn)異步的一種手段。異步是當一個調(diào)用請求發(fā)送給被調(diào)用者,而調(diào)用者不用等待其結(jié)果的返回而可以做其它的事情。實現(xiàn)異步可以采用多線程技術(shù)或則交給另外的進程來處理。

為了對以上概念的更好理解舉一個簡單例子, 假設我要做 燒開水,舉杠鈴100下, 洗衣服 3件事情。

燒開水 這件事情, 我要做的事情為, 準備燒開水 1分鐘, 等開水燒開 8 分鐘 , 關(guān)掉燒水機 1分鐘

舉杠鈴100下 我要做的事情為, 舉杠鈴100下 10分鐘

洗衣服 我要做的事情為, 準備洗衣服 1分鐘, 等開水燒開 5 分鐘 , 關(guān)掉洗衣機 1分鐘

單核情況下

同步的完成,我需要做的時間為 1+ 8 +1 + 10 + 1+ 5 +1 = 27 分

如果異步,就是在等的時候,我可以切換去做別的事情

準備燒開水(1) + 準備洗衣服(1) + 舉50下杠鈴 (5)分鐘+ 關(guān)洗衣機 1分鐘 + 舉杠鈴20下 (2)分鐘+ 關(guān)燒水機 1分鐘 +  舉30下杠鈴(3)分鐘

1+1+5+1+2+1+3 =14 分鐘

雙核 異步 并行

核1 準備燒開水 1分鐘+ 舉杠鈴50下(5)分鐘+ 等待3分鐘 + 關(guān)掉燒水機 1分鐘

核2 準備洗衣服 1分鐘+ 舉杠鈴50下(5)分鐘+ 關(guān)掉洗衣機 1分鐘 + 等待3分鐘

其實只花了 1+5+3+1 = 10分鐘

其中還有雙核都等待了3分鐘

雙核 異步 非并行

核1 舉杠鈴100下(10)分鐘

核2 準備燒開水 1分鐘+ 準備洗衣服 1分鐘+ 等待5 分鐘+ + 關(guān)掉燒水機 1分鐘 + 等待 1 分鐘 + 關(guān)掉洗衣機 1分鐘

其實只花了 1+5+3+1 = 10分鐘

多線程的做法

單核下

線程1 準備燒開水 1分鐘, 等開水燒開 8 分鐘 , 關(guān)掉燒水機 1分鐘

線程2 舉杠鈴100下 10分鐘

線程3 準備洗衣服 1分鐘, 等開水燒開 5 分鐘 , 關(guān)掉洗衣機 1分鐘

cpu 可能這么切換 最理想的切換方式

線程1 準備燒開水1 sleep 1 sleep 5 sleep 1 sleep 2 關(guān)開水 1分鐘 exit

線程2 sleep 1 sleep 1 舉杠鈴50 5分鐘 sleep 1 舉杠鈴20 2分鐘 sleep1 舉杠鈴30下 3分鐘

線程3 sleep 1 準備洗衣服1 分鐘 sleep 5 關(guān)洗衣機1分鐘 exit

***使用了 14分鐘 和異步是一樣的。

但是實際上是不一樣的,因為線程不會按照我們設想的去跑, 如果線程2 舉杠鈴先跑,整個流程的速度就下來了。

異步和同步的區(qū)別, 在io等待的時候,同步不會切走,浪費了時間。

如果都是獨占cpu 的業(yè)務, 比如舉杠鈴的業(yè)務, 在單核情況下 多線和單線 沒有區(qū)別。

多線程的好處,比較容易的實現(xiàn)了 異步切換的思想, 因為異步的程序很難寫的。多線程本身程還是以同步完成,但是應該說

比效率是比不上異步的。 而且多線很容易寫, 相對效率也高。

多核的好處,就是可以同時做事情, 這個和單核完全不一樣的。

感謝各位的閱讀,以上就是“詳解Java線程與進程的區(qū)別”的內(nèi)容了,經(jīng)過本文的學習后,相信大家對詳解Java線程與進程的區(qū)別這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是創(chuàng)新互聯(lián),小編將為大家推送更多相關(guān)知識點的文章,歡迎關(guān)注!

標題名稱:詳解Java線程與進程的區(qū)別
本文來源:http://jinyejixie.com/article10/pshgdo.html

成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供微信公眾號、網(wǎng)站內(nèi)鏈App設計、做網(wǎng)站、品牌網(wǎng)站建設、域名注冊

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)

成都網(wǎng)站建設公司
莎车县| 运城市| 太湖县| 南城县| 犍为县| 赤城县| 大荔县| 肃北| 屯留县| 即墨市| 辉县市| 揭东县| 来凤县| 六安市| 卢氏县| 淮北市| 梁平县| 平阳县| 大新县| 麻阳| 常宁市| 灌南县| 山东省| 大埔区| 绥芬河市| 祁连县| 杨浦区| 惠州市| 陆丰市| 泸州市| 卫辉市| 高邮市| 玉山县| 滨州市| 旌德县| 车致| 屯门区| 遂川县| 莆田市| 布尔津县| 佛学|