1. gzyueqian
      13352868059

      Java培訓:Java中的Fork/Join框架的并行編程基礎

      更新時間: 2022-05-11 10:04:47來源: 粵嵌教育瀏覽量:8511

        隨著近年來多核 CPU 的出現,并行編程是充分利用新處理工作資源的方式。并行編程是指由于多個處理核心的可用性,進程的并發執行。從本質上講,與線性單核執行甚至多線程相比,這會極大地提高程序的性能和效率。Fork/Join 框架是 Java 并發 API 的一部分,該框架使程序員能夠并行化算法。本文借助 Java 中可用的 Fork/Join 框架探索并行編程的概念。想對java有更深入的了解,可以參加java培訓,在專業老師的指導下,你可以很快掌握java的更多特性。

        概述

        并行編程具有更廣泛的內涵,無疑是一個廣闊的領域,可以用幾行來闡述。問題的癥結很簡單,但在操作上卻很難實現。簡單來說,并行編程意味著編寫使用多個處理器來完成任務的程序,僅此而已!它幾乎與多線程的想法押韻。但是,請注意它們之間有一些重要的區別。從表面上看,他們是一樣的,但實質卻是完全不同的。事實上,引入多線程是為了提供一種并行處理的錯覺,根本沒有真正的并行執行。多線程的真正作用是它竊取了 CPU 空閑時間并利用它來發揮自己的優勢。

        簡而言之,多線程是任務的離散邏輯單元的集合,這些任務運行以獲取它們的 CPU 時間份額,而另一個線程可能會暫時等待,例如,一些用戶輸入。空閑 CPU 時間最佳地在競爭線程之間共享。如果只有一個 CPU,它是時間共享的。如果有多個 CPU 內核,它們也都是時間共享的。因此,一個最優的多線程程序通過巧妙的分時機制來擠壓 CPU 的性能。本質上,總是一個線程使用一個 CPU,而另一個線程正在等待。這以一種微妙的方式發生,用戶會感覺到并行處理,實際上,處理實際上是快速連續發生的。多線程的最大優勢在于它是一種最大限度地利用處理資源的技術。現在,這個想法非常有用,可以在任何一組環境中使用,無論是單個 CPU 還是多個 CPU。這個想法是一樣的。在java培訓中,培訓課程不僅注重理論,更注重項目的實戰能力,能夠讓你快速適應企業開發的進度,成為企業所需要的Java人才。

        另一方面,并行編程意味著程序員可以并行使用多個專用 CPU。這種類型的編程針對多核 CPU 環境進行了優化。今天的大多數機器都使用多核 CPU。因此,并行編程在當今非常重要。即使是最便宜的機器也安裝了多核 CPU。看看手持設備;即使它們是多核的。盡管多核 CPU 的一切看起來都很笨拙,但這也是故事的另一面。更多的 CPU 內核是否意味著更快或更高效的計算?實際上,在日常計算中,即使是單個 CPU 也很難保持忙碌。但是,多核在特殊情況下也有其用途,例如在服務器、游戲等或解決大問題時。擁有多個 CPU 的問題在于,它需要的內存必須與速度與處理能力相匹配,以及閃電般快速的數據通道和其他附件。簡而言之,日常計算中的多個 CPU 內核提供的性能改進不能超過使用它所需的資源量。因此,我們得到了一臺未被充分利用的昂貴機器,可能只是為了展示。

        






        并行編程

        與多線程不同,其中每個任務都是較大任務的離散邏輯單元,并行編程任務是獨立的,它們的執行順序無關緊要。任務是根據它們執行的功能或處理中使用的數據來定義的;這分別稱為功能并行或數據并行。在功能并行中,每個處理器處理其部分問題,而在數據并行中,處理器處理其部分數據。并行編程適用于不適合單個 CPU  架構的較大問題庫,或者可能是問題太大以至于無法在合理的估計時間內解決。因此,任務在處理器之間分配時,可以相對較快地獲得結果。參加以實戰項目為主要教學方法的Java培訓,可以有效地縮短同企業具體用人需求之間的差距,快速提升自己。

        Fork/Join 框架

        Fork/Join 框架在 java.util.concurrent 包中定義。它包括幾個支持并行編程的類和接口。它的主要作用是簡化了多線程的創建過程、它們的使用,并使多處理器之間的進程分配機制自動化。使用該框架進行多線程和并行編程之間的顯著區別與我們之前提到的非常相似。在這里,處理部分被優化為使用多個處理器,這與多線程不同,其中單個 CPU 的空閑時間在共享時間的基礎上進行了優化。該框架的額外優勢是在并行執行環境中使用多線程。

        這個框架中有四個核心類:

        1、ForkJoinTask<V>:這是一個定義任務的抽象類。通常,任務是在此類中定義的 fork() 方法的幫助下創建的。這個任務幾乎類似于使用 Thread 類創建的普通線程,但比它輕。它應用的機制是它可以在加入 ForkJoinPool 的少量實際線程的幫助下管理大量任務。fork() 方法可以異步執行調用任務。join() 方法允許等待,直到調用它的任務最終終止。還有另一種方法,稱為invoke(),它將fork 和join 操作組合成一個調用。

        2、ForkJoinPool:這個類提供了一個公共池來管理 ForkJoinTask 任務的執行。它基本上為非 ForkJoinTask 客戶端的提交以及管理和監控操作提供了入口點。

        3、RecursiveAction:這也是 ForkJoinTask 類的抽象擴展。通常,我們擴展此類以創建不返回結果或具有 void 返回類型的任務。此類中定義的 compute() 方法被覆蓋以包含任務的計算代碼。

        4、RecursiveTask:這是 ForkJoinTask 類的另一個抽象擴展。我們擴展這個類來創建一個返回結果的任務。而且,與 ResursiveAction 類似,它還包括一個受保護的抽象 compute() 方法。此方法被覆蓋以包括任務的計算部分。想要快速有效學習java,建議考慮參加java培訓學習,這是初學者獲得快速提升的有效捷徑,系統規范性課程,專業導師,實操性項目,讓你獲得全面提升。

        






        Fork/Join 框架策略

        該框架采用遞歸分治策略來實現并行處理。它基本上將一個任務分成更小的子任務;然后,將每個子任務進一步劃分為子子任務。這個過程遞歸地應用于每個任務,直到它小到可以按順序處理。假設我們要增加 N 個數字的數組的值。這就是任務。現在,我們可以將數組一分為二,創建兩個子任務。將它們中的每一個再次劃分為另外兩個子任務,依此類推。通過這種方式,我們可以遞歸地應用分而治之的策略,直到將任務挑出到一個單元問題中。然后,這個單元問題可以由可用的多核處理器并行執行。在非并行環境中,我們要做的就是循環遍歷整個數組,依次進行處理。鑒于并行處理,這顯然是一種低效的方法。但是,真正的問題是每一個問題都可以分而治之嗎?絕對不!但是,有些問題通常涉及某種特別適合這種方法的數據數組、集合和分組。順便說一句,有些問題可能不使用數據收集,但可以優化以使用并行編程策略。

        結論

        這是對并行編程及其在 Java 中的支持方式的簡要描述。一個公認的事實是,擁有 N 個內核并不會讓一切都快 N 倍。只有一部分 Java 應用程序有效地使用了這個特性。并行編程代碼是一個困難的框架。此外,有效的并行程序必須考慮負載平衡、并行任務之間的通信等問題,有一些算法更適合并行執行,但很多不適合。無論如何,Java API并不缺乏它的支持,我們可以隨時修改 API 以找出最適合的 API。參加java培訓可以讓你學到很多關于Java API的知識和技巧,幫助你更好地進行開發工作 。


      免費預約試聽課

      亚洲另类欧美综合久久图片区_亚洲中文字幕日产无码2020_欧美日本一区二区三区桃色视频_亚洲AⅤ天堂一区二区三区

      
      

      1. 日韩国产精品久久午夜夜伦鲁鲁 | 久久三级中文欧大战字幕 | 青青青视频手机在线看 | 久久精品79国产精品 | 午夜福利免费视频一区二区 | 欧美亚洲另类中文 |