欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

一篇文章幫你搞懂什么是java的進(jìn)程和線程

 更新時間:2021年08月02日 15:22:50   作者:保護(hù)眼睛  
這篇文章主要介紹了java 線程詳解及線程與進(jìn)程的區(qū)別的相關(guān)資料,網(wǎng)上關(guān)于java 線程的資料很多,對于進(jìn)程的資料很是,這里就整理下,需要的朋友可以參考下

為什么會有進(jìn)程

在簡單的批處理操作系統(tǒng)中,作業(yè)時串行執(zhí)行的,即一個作業(yè)一旦開始執(zhí)行,它就會計算機(jī)系統(tǒng)的所有資源,直到運(yùn)行結(jié)束之后,下一個作業(yè)才可以繼續(xù)執(zhí)行。

在多道程序設(shè)計批處理的系統(tǒng)中,多個作業(yè)可以被載入內(nèi)存,從宏觀上看,多個作業(yè)并行執(zhí)行,他們共享處理器、內(nèi)存等計算機(jī)資源。

在分時系統(tǒng)中,為支持多用戶交互,處理器在時間維度上被劃為若干間隙,在每一時間間隙,一個用戶完全占有計算器資源。由于時間間隙很短,在宏觀上看,計算機(jī)任可以同時為多個用戶服務(wù)、提高計算機(jī)與用戶交互的效率。
程序或作業(yè)的并發(fā)執(zhí)行是現(xiàn)代操作系統(tǒng)的一個基本特征。并發(fā)執(zhí)行的程序必要滿足以下幾個特征才能稱為真正意義上的并發(fā)執(zhí)行:

資源共享的需求、相互隔離的要求、通信和同步的要求

要實(shí)現(xiàn)多個程序的并發(fā)執(zhí)行,它們必需能夠共享處理器、內(nèi)存以及I/O設(shè)備等計算機(jī)資源。

盡管多個程序并發(fā)執(zhí)行,但在邏輯上各個程序應(yīng)當(dāng)是相互獨(dú)立的,即一個程序的執(zhí)行結(jié)果不受其它程序執(zhí)行的影響。

有時候,程序之間不完全是相互隔離的,而是存在依賴關(guān)系的,即需要進(jìn)行通信和同步。

所以要實(shí)現(xiàn)真正意義上的并發(fā),單純的依靠處理器的指令循環(huán)是遠(yuǎn)遠(yuǎn)不夠的。

進(jìn)程的概念

進(jìn)程是對一個計算任務(wù)的抽象和封裝,使每個計算任務(wù)更好地實(shí)現(xiàn)隔離性、資源共享性和同步的需求。

進(jìn)程的說法有很多、可以這樣理解進(jìn)程的概念:

1.進(jìn)程是計算機(jī)程序在處理器上執(zhí)行時所發(fā)生的活動,即進(jìn)程時程序的一次執(zhí)行活動

2.進(jìn)程是對一次計算任務(wù)的封裝和抽象、它是一個由執(zhí)行流、一個數(shù)據(jù)集、和相關(guān)的系統(tǒng)的資源組成的一個活動單元。

3.進(jìn)程是程序執(zhí)行的一次實(shí)例,是動態(tài)的概念、而程序本質(zhì)上是一個規(guī)則(是一個二進(jìn)制串、也就是機(jī)器指令)、通常以文件的形式存在、是靜態(tài)的概念、一個計算機(jī)可以同時運(yùn)行一個程序的多個進(jìn)程。

4.進(jìn)程之間共享計算機(jī)資源、并在邏輯上相互獨(dú)立、或者通過同步機(jī)制相互的協(xié)調(diào),共同的完成一項(xiàng)計算任務(wù)。

進(jìn)程的特征

進(jìn)程是由多程序的并發(fā)執(zhí)行而引出的,它和程序是兩個截然不同的概念。進(jìn)程的基本特征是對比單個程序的順序執(zhí)行提出的,也是對進(jìn)程管理提出的基本要求。

動態(tài)性:進(jìn)程是程序的一次執(zhí)行,它有著創(chuàng)建、活動、暫停、終止等過程,具有一定的生命周期,是動態(tài)地產(chǎn)生、變化和消亡的。動態(tài)性是進(jìn)程最基本的特征。

并發(fā)性:指多個進(jìn)程實(shí)體,同存于內(nèi)存中,能在一段時間內(nèi)同時運(yùn)行,并發(fā)性是進(jìn)程的重要特征,同時也是操作系統(tǒng)的重要特征。引入進(jìn)程的目的就是為了使程序能與其他進(jìn)程的程序并發(fā)執(zhí)行,以提高資源利用率。

獨(dú)立性:指進(jìn)程實(shí)體是一個能獨(dú)立運(yùn)行、獨(dú)立獲得資源和獨(dú)立接受調(diào)度的基本單位。凡未建立PCB的程序都不能作為一個獨(dú)立的單位參與運(yùn)行。

異步性:由于進(jìn)程的相互制約,使進(jìn)程具有執(zhí)行的間斷性,即進(jìn)程按各自獨(dú)立的、 不可預(yù)知的速度向前推進(jìn)。異步性會導(dǎo)致執(zhí)行結(jié)果的不可再現(xiàn)性,為此,在操作系統(tǒng)中必須配置相應(yīng)的進(jìn)程同步機(jī)制。

結(jié)構(gòu)性:每個進(jìn)程都配置一個PCB對其進(jìn)行描述。從結(jié)構(gòu)上看,進(jìn)程實(shí)體是由程序段、數(shù)據(jù)段和進(jìn)程控制段三部分組成的。

線程

是操作系統(tǒng)能夠進(jìn)行運(yùn)算調(diào)度的最小單位。它被包含在進(jìn)程之中,是進(jìn)程中的實(shí)際運(yùn)作單位。一條線程指的是進(jìn)程中一個單一順序的控制流,一個進(jìn)程中可以并發(fā)多個線程,每條線程并行執(zhí)行不同的任務(wù)。

在這里插入圖片描述

線程的結(jié)構(gòu)

線程控制塊:與進(jìn)程控制塊類似,包含了描述線程屬性的信息,如線程ID、線程的棧指針、程序計數(shù)器、條件碼和通用寄存器的值等,以及線程的執(zhí)行狀態(tài)(運(yùn)行、就緒等)。

線程執(zhí)行棧:保存一個線程執(zhí)行過程中的活動記錄,包括用戶棧和內(nèi)核棧。其中用戶棧用于保存過程調(diào)用的活動記錄,內(nèi)核棧用于保存系統(tǒng)調(diào)用的活動記錄。執(zhí)行棧對于每個線程來說都是私有的,因此不同線程的執(zhí)行流不會發(fā)生相互干擾。

線程局部存儲(TLS,Thread Local Storage):是某些操作系統(tǒng)為線程單獨(dú)提供的私有空間,用于存儲每個線程私有的全局變量,即一個線程內(nèi)部的各個過程調(diào)用都能訪問、但其他線程不能訪問的變量。

進(jìn)程之中創(chuàng)建線程的優(yōu)點(diǎn)

在一個進(jìn)程之中創(chuàng)建線程的優(yōu)點(diǎn):

1.在一個已有的進(jìn)程之中創(chuàng)建一個線程比創(chuàng)建一個新的進(jìn)程所需的開銷時間要少許多、Mach開發(fā)者的研究表明、創(chuàng)建一個線程比創(chuàng)建一個進(jìn)程快10倍。

2.終止一個線程比終止一個進(jìn)程所花費(fèi)的時間要少

3.同一個進(jìn)程內(nèi)線程之間的切換所花費(fèi)的時間要比進(jìn)程之間切換所花費(fèi)的時間要少

4.線程提高了程序之間的通信效率、在大多數(shù)的操作系統(tǒng)中、獨(dú)立的進(jìn)程之間的通信需要內(nèi)核的介入、但是同一個進(jìn)程之中的線程共享內(nèi)存和文件、同一個進(jìn)程之中的線程之間的通信不需要內(nèi)核的介入。

進(jìn)程和線程的區(qū)別

地址空間:

線程共享本進(jìn)程的地址空間,而進(jìn)程之間是獨(dú)立的地址空間。

資源:

線程共享本進(jìn)程的資源如內(nèi)存、I/O、cpu等,不利于資源的管理和保護(hù),而進(jìn)程之間的資源是獨(dú)立的,能很好的進(jìn)行資源管理和保護(hù)。

健壯性:

多進(jìn)程要比多線程健壯,一個進(jìn)程崩潰后,在保護(hù)模式下不會對其他進(jìn)程產(chǎn)生影響,但是一個線程崩潰整個進(jìn)程都死掉。

執(zhí)行過程:

每個獨(dú)立的進(jìn)程有一個程序運(yùn)行的入口、順序執(zhí)行序列和程序入口,執(zhí)行開銷大。

線程不能獨(dú)立執(zhí)行,必須依存在應(yīng)用程序中,由應(yīng)用程序提供多個線程執(zhí)行控制,執(zhí)行開銷小。

可并發(fā)性:

兩者均可并發(fā)執(zhí)行。

切換時:

進(jìn)程切換時,消耗的資源大,效率高。所以涉及到頻繁的切換時,使用線程要好于進(jìn)程。同樣如果要求同時進(jìn)行并且又要共享某些變量的并發(fā)操作,只能用線程不能用進(jìn)程。

線程是處理器調(diào)度的最小單位,但是進(jìn)程時操作系統(tǒng)資源分配的最小單位。

進(jìn)程和線程之間的關(guān)系

線程:進(jìn)程 描述 示例系統(tǒng)
1:1 一個進(jìn)程中只有一個線程 比如UNIX
M:1 可以在一個進(jìn)程之中創(chuàng)建多個的線程、這些線程共享進(jìn)程用戶的地址空間 Windows NT、Linux、MACH、Solaris
1:M 一個線程可以從一個進(jìn)程環(huán)境遷移到另一個進(jìn)程環(huán)境中 RS、Emerald
M:N 也就是結(jié)合了M:1和1:M的情況 TRIX

總結(jié)

本篇文章就到這里了,希望能給你帶來幫助,也希望您能夠多多關(guān)注腳本之家的更多內(nèi)容!

相關(guān)文章

  • Spring中的DeferredImportSelector實(shí)現(xiàn)詳解

    Spring中的DeferredImportSelector實(shí)現(xiàn)詳解

    這篇文章主要介紹了Spring中的DeferredImportSelector實(shí)現(xiàn)詳解,兩個官方的實(shí)現(xiàn)類AutoConfigurationImportSelector和ImportAutoConfigurationImportSelector都是Spring Boot后新增的實(shí)現(xiàn),需要的朋友可以參考下
    2024-01-01
  • Java去除字符串中空格的方法詳解

    Java去除字符串中空格的方法詳解

    這篇文章主要介紹了Java去除字符串中空格的方法詳解,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2019-08-08
  • 解決IDEA克隆代碼后在右下角沒有g(shù)it分支的問題

    解決IDEA克隆代碼后在右下角沒有g(shù)it分支的問題

    這篇文章主要介紹了解決IDEA克隆代碼后在右下角沒有g(shù)it分支的問題,具有很好的參考價值,希望對大家有所幫助。一起跟隨小編過來看看吧
    2021-02-02
  • Eureka注冊不上或注冊后IP不對(多網(wǎng)卡的坑及解決)

    Eureka注冊不上或注冊后IP不對(多網(wǎng)卡的坑及解決)

    這篇文章主要介紹了Eureka注冊不上或注冊后IP不對(多網(wǎng)卡的坑及解決),具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • log4j詳細(xì)的常用配置說明介紹

    log4j詳細(xì)的常用配置說明介紹

    下面看我怎么一步步配置到控制臺的,log4j的輸出級別和輸出模式相信都知道的
    2012-11-11
  • Java設(shè)計模式UML之類圖精解

    Java設(shè)計模式UML之類圖精解

    在UML類圖中,類使用包含類名、屬性(field) 和方法(method) 且?guī)в蟹指罹€的矩形來表示,比如下圖表示一個Employee類,它包含name,age和email這3個屬性,以及modifyInfo()方法
    2022-02-02
  • PL/SQL實(shí)現(xiàn)JAVA中的split()方法的例子

    PL/SQL實(shí)現(xiàn)JAVA中的split()方法的例子

    這篇文章主要介紹了PL/SQL實(shí)現(xiàn)JAVA中的split()方法的例子的相關(guān)資料,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2016-07-07
  • springboot獲取URL請求參數(shù)的多種方式

    springboot獲取URL請求參數(shù)的多種方式

    這篇文章主要介紹了springboot獲取URL請求參數(shù)的多種方式,非常不錯,具有參考借鑒價值,需要的朋友可以參考下
    2018-01-01
  • Java設(shè)計模式之備忘錄模式使用詳解

    Java設(shè)計模式之備忘錄模式使用詳解

    這篇文章主要介紹了Java設(shè)計模式中備忘錄模式的使用,備忘錄設(shè)計模式也叫作快照模式,主要用于實(shí)現(xiàn)防丟失、撤銷、恢復(fù)等功能,本文將通過示例為大家講解備忘錄模式的定義與使用,需要的同學(xué)可以參考一下
    2024-02-02
  • spring cloud 分布式鏈路追蹤的方法

    spring cloud 分布式鏈路追蹤的方法

    這篇文章主要介紹了spring cloud 分布式鏈路追蹤的方法,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-07-07

最新評論