国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

Java并發(fā)(1)--線程,進程,以及緩存

這篇具有很好參考價值的文章主要介紹了Java并發(fā)(1)--線程,進程,以及緩存。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

線程和進程是什么?

進程

進程是程序的一次執(zhí)行過程,系統(tǒng)程序的基本單位。有自己的main方法,并且主要由主方法運行起來的基本上就是進程。

線程

線程與進程相似,但線程是一個比進程更小的執(zhí)行單位。一個進程在其執(zhí)行的過程中可以產(chǎn)生多個線程。與進程不同的是同類的多個線程共享方法區(qū)資源,但每個線程有自己的程序計數(shù)器、虛擬機棧本地方法棧,所以系統(tǒng)在產(chǎn)生一個線程,或是在各個線程之間作切換工作時,負擔要比進程小得多,也正因為如此,線程也被稱為輕量級進程。

線程的狀態(tài)

新建,就緒,運行,等待,阻塞,死亡。

當兩個線程分別thread.start()時,只是將線程變成了就緒態(tài),不是運行態(tài),所以運行的順序,還不一定。

線程與進程的關系,區(qū)別及優(yōu)缺點?

圖解關系

下圖是 Java 內(nèi)存區(qū)域,通過下圖我們從 JVM 的角度來說一下線程和進程之間的關系。

圖片來自JavaGuide

Java并發(fā)(1)--線程,進程,以及緩存,java,緩存,開發(fā)語言

從上圖可以看出:一個進程中可以有多個線程,多個線程共享進程的方法區(qū) (JDK1.8 之后的元空間)*資源,但是每個線程有自己的*程序計數(shù)器、虛擬機棧本地方法棧。

一句話簡單了解堆和方法區(qū)

堆和方法區(qū)是所有線程共享的資源,其中堆是進程中最大的一塊內(nèi)存,主要用于存放新創(chuàng)建的對象 (幾乎所有對象都在這里分配內(nèi)存),方法區(qū)主要用于存放已被加載的類信息、常量、靜態(tài)變量、即時編譯器編譯后的代碼等數(shù)據(jù)。

總結

線程是進程劃分成的更小的運行單位。線程和進程最大的不同在于基本上各進程是獨立的,而各線程則不一定,因為同一進程中的線程極有可能會相互影響。線程執(zhí)行開銷小,但不利于資源的管理和保護;而進程正相反。

高速緩存存在的意義?多級緩存的作用?

高速緩存

結論:支持了多核CPU的發(fā)展。

相當于在CPU 內(nèi)部再開辟了一個區(qū)域,用于連接CPU中的核心和內(nèi)存。也就是原先是CPU和內(nèi)存交互,這樣占據(jù)總線,其他核心就不能再次與內(nèi)存進行交互。有了高速緩存之后,核心可以與高速緩存交互,然后高速緩存和內(nèi)存交互,(相當于把高速緩存變成單核,整體速度提升),這樣釋放總線,不會有被占用的情況。

如果需要對一個變量累加50次,但是不一定高速緩存全加完才更新返回到內(nèi)存區(qū),實際是可能是累加兩次就返回,之后再進入高速緩存區(qū)進行累加,所以更新多少次進行返回是不確定的。

如果變量或數(shù)據(jù)更新完畢,那么傳入內(nèi)存后,高速緩存中的數(shù)據(jù)就會消失。

在高速緩存中,進程的切換與時間片有關,如果數(shù)據(jù)處理量很大的話,多線程可能會發(fā)生覆蓋的問題,例如兩個線程都給a累加5000次,那么a的極端情況可能會是2,可能導致線程1和線程2的累加操作互相覆蓋,第一個線程剛累加第一次,a變成2,然后進程切換,返回給內(nèi)存,a又變成1。如果數(shù)據(jù)量很小的話,時間片夠,那就不會進行切換。

多級緩存

相當于50個人接力 打水。站在一起,把水傳遞給下一個人。讓傳遞速度加快,效率更高。

并發(fā)與并行的區(qū)別

  • 并發(fā):兩個及兩個以上的作業(yè)在同一 時間段 彼此互相干擾 內(nèi)執(zhí)行。

  • 并行:兩個及兩個以上的作業(yè)在同一 時刻 互不干擾的執(zhí)行。

最關鍵的點是:是否是 同時 執(zhí)行,和是否互相干擾。

如果能同時執(zhí)行,那證明一定是互不干擾的。在同一時間段內(nèi),細分時間,一個時間內(nèi)不能兩個作業(yè)同時進行,那么證明一定是互相干擾的。

同步和異步的區(qū)別

  • 同步:發(fā)出一個調用之后,在沒有得到結果之前, 該調用就不可以返回,一直等待。

  • 異步:調用在發(fā)出之后,不用等待返回結果,該調用直接返回。

例如:a調用一個資源,但是資源被其他作業(yè)占用,那么我需要一直等著就是同步,調用完我繼續(xù)做我自己的事,不傻等著就是異步。

為什么要使用多線程?

先從總體上來說:

  • 從計算機底層來說: 線程可以比作是輕量級的進程,是程序執(zhí)行的最小單位,線程間的切換和調度的成本遠遠小于進程。另外,多核 CPU 時代意味著多個線程可以同時運行,這減少了線程上下文切換的開銷。

  • 從當代互聯(lián)網(wǎng)發(fā)展趨勢來說: 現(xiàn)在的系統(tǒng)動不動就要求百萬級甚至千萬級的并發(fā)量,而多線程并發(fā)編程正是開發(fā)高并發(fā)系統(tǒng)的基礎,利用好多線程機制可以大大提高系統(tǒng)整體的并發(fā)能力以及性能。

再深入到計算機底層來探討:

  • 單核時代:在單核時代多線程主要是為了提高單進程利用 CPU 和 IO 系統(tǒng)的效率。 假設只運行了一個 Java 進程的情況,當我們請求 IO 的時候,如果 Java 進程中只有一個線程,此線程被 IO 阻塞則整個進程被阻塞。CPU 和 IO 設備只有一個在運行,那么可以簡單地說系統(tǒng)整體效率只有 50%。當使用多線程的時候,一個線程被 IO 阻塞,其他線程還可以繼續(xù)使用 CPU。從而提高了 Java 進程利用系統(tǒng)資源的整體效率。

  • 多核時代: 多核時代多線程主要是為了提高進程利用多核 CPU 的能力。舉個例子:假如我們要計算一個復雜的任務,我們只用一個線程的話,不論系統(tǒng)有幾個 CPU 核心,都只會有一個 CPU 核心被利用到。而創(chuàng)建多個線程,這些線程可以被映射到底層多個 CPU 上執(zhí)行,在任務中的多個線程沒有資源競爭的情況下,任務執(zhí)行的效率會有顯著性的提高,約等于(單核時執(zhí)行時間/CPU 核心數(shù))。文章來源地址http://www.zghlxwxcb.cn/news/detail-853734.html

到了這里,關于Java并發(fā)(1)--線程,進程,以及緩存的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。如若轉載,請注明出處: 如若內(nèi)容造成侵權/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關文章

  • 【Java基礎教程】(四十二)多線程篇 · 上:多進程與多線程、并發(fā)與并行的關系,多線程的實現(xiàn)方式、線程流轉狀態(tài)、常用操作方法解析~

    【Java基礎教程】(四十二)多線程篇 · 上:多進程與多線程、并發(fā)與并行的關系,多線程的實現(xiàn)方式、線程流轉狀態(tài)、常用操作方法解析~

    理解進程與線程的區(qū)別; 掌握Java 中多線程的兩種實現(xiàn)方式及區(qū)別; 掌握線程的基本操作方法; 進程是程序的一次動態(tài)執(zhí)行過程,它經(jīng)歷了從代碼加載、執(zhí)行到執(zhí)行完畢的一個完整過程,這個過程也是進程本身從產(chǎn)生、發(fā)展到最終消亡的過程 。多進程操作系統(tǒng)能同時運行多

    2024年02月16日
    瀏覽(30)
  • 關于進程、線程、協(xié)程的概念以及Java中的應用

    本文將從“操作系統(tǒng)”、“Java應用”上兩個角度來探究這三者的區(qū)別。 在我本人的疑惑中,我有以下3個問題。 在“多道程序環(huán)境下”,允許多個程序并發(fā)執(zhí)行,此時它們將失去封閉性,并具有間斷性以及不可再現(xiàn)性的特征,因此需要引入進程的概念。 進程是程序執(zhí)行的過

    2024年02月08日
    瀏覽(20)
  • 【JAVA開發(fā)面試】如何處理并發(fā)訪問如何進行代碼的單元測試Java多線程編程消息中間件設計模式技術難題是如何解決的

    【 點我-這里送書 】 本人詳解 作者:王文峰,參加過 CSDN 2020年度博客之星,《Java王大師王天師》 公眾號:JAVA開發(fā)王大師,專注于天道酬勤的 Java 開發(fā)問題 中國國學、傳統(tǒng)文化和代碼愛好者的程序人生,期待你的關注和支持!本人外號:神秘小峯 山峯 轉載說明:務必注明

    2024年02月03日
    瀏覽(131)
  • Java并發(fā)編程——偽共享和緩存行問題

    Java并發(fā)編程——偽共享和緩存行問題

    在Java并發(fā)編程中,偽共享(False Sharing)和緩存行(Cache Line)是與多線程訪問共享數(shù)據(jù)相關的兩個重要概念。 偽共享指的是多個線程同時訪問同一個緩存行中的不同變量或數(shù)據(jù),其中至少一個線程對其中一個變量進行寫操作。由于處理器緩存行的一致性協(xié)議要求緩存行中的數(shù)

    2024年02月02日
    瀏覽(14)
  • Java多線程與并發(fā)

    Java多線程與并發(fā)

    序號 地址 1 計算機網(wǎng)絡核心 2 數(shù)據(jù)庫相關 3 Redis 4 Linux相關 5 JVM的內(nèi)容 6 GC相關的 7 Java多線程與并發(fā) 8 Java多線程與并發(fā)-原理 9 Java常用類庫與技巧 10 Java框架-Spring 1、JDK版本的選擇 選擇JDK8、JDK11進行講解的原因:Oracle長期支持 2、進程和線程的區(qū)別 進程和線程的由來 3、進程與

    2024年02月10日
    瀏覽(24)
  • JAVA的多線程及并發(fā)

    繼承 Thread 類; 實現(xiàn) Runnable 接口; 實現(xiàn) Callable 接口通過 FutureTask 包裝器來創(chuàng)建 Thread 線程; 使 用 ExecutorService 、 Callable 、 Future 實 現(xiàn) 有 返 回 結 果 的多 線 程 ( 也 就 是 使 用 了 ExecutorService 來管理前面的三種方式)。 1、使用退出標志,使線程正常退出,也就是當 run

    2024年03月13日
    瀏覽(46)
  • Java并發(fā)(四)----線程運行原理

    Java并發(fā)(四)----線程運行原理

    1.1 棧與棧幀?? Java Virtual Machine Stacks (Java 虛擬機棧 JVM) 我們都知道 JVM 中由堆、棧、方法區(qū)所組成,其中棧內(nèi)存是給誰用的呢?其實就是線程,每個線程啟動后,虛擬機就會為其分配一塊棧內(nèi)存。 每個棧由多個棧幀(Frame)組成,對應著每次方法調用時所占用的內(nèi)存 每個

    2024年02月02日
    瀏覽(19)
  • Java 并發(fā)(多線程)超詳細

    Java 并發(fā)(多線程)超詳細

    此文章已收錄至項目 Developer-Knowledge-Base https://www.cnblogs.com/snow-flower/p/6114765.html java 中的 Lock 鎖 https://javaguide.cn/java/concurrent/java-concurrent-questions-03.html https://www.cnblogs.com/lifegoeson/p/13683785.html 程序是由指令和數(shù)據(jù)有序組成的靜態(tài)概念,程序本身沒有運行的含義,只有在處理器賦予

    2024年02月09日
    瀏覽(41)
  • 【Java|多線程與高并發(fā)】線程池詳解

    【Java|多線程與高并發(fā)】線程池詳解

    Java線程池是一種用于管理和重用線程的機制,它可以在需要執(zhí)行任務時,從線程池中獲取線程,執(zhí)行任務,然后將線程放回池中,以便后續(xù)使用。線程池可以有效地管理線程的數(shù)量,提高程序的性能和資源利用率。 為什么從線程池里面取線程比直接創(chuàng)建線程快呢? 創(chuàng)建線程是

    2024年02月11日
    瀏覽(28)
  • 【Java 并發(fā)編程】Java 線程本地變量 ThreadLocal 詳解

    【Java 并發(fā)編程】Java 線程本地變量 ThreadLocal 詳解

    先一起看一下 ThreadLocal 類的官方解釋: 用大白話翻譯過來,大體的意思是: ThreadLoal 提供給了 線程局部變量 。同一個 ThreadLocal 所包含的對象,在不同的 Thread 中有不同的副本。這里有幾點需要注意: 因為每個 Thread 內(nèi)有自己的實例副本,且 該副本只能由當前 Thread 使用 。

    2024年02月04日
    瀏覽(31)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包