標簽 ‘ Fork/Join

Oracle官方教程之Fork/Join

原文鏈接,譯文鏈接,譯者:Zach,校對:鄭旭東

fork/join框架是ExecutorService接口的一種具體實現,目的是為了幫助你更好地利用多處理器帶來的好處。它是為那些能夠被遞歸地拆解成子任務的工作類型量身設計的。其目的在于能夠使用所有可用的運算能力來提升你的應用的性能。
閱讀全文

定制并發類(七)實現ThreadFactory接口生成自定義的線程給Fork/Join框架

聲明:本文是《 Java 7 Concurrency Cookbook 》的第七章,作者: Javier Fernández González ? ? 譯者:許巧輝

實現ThreadFactory接口生成自定義的線程給Fork/Join框架

Fork/Join框架是Java7中最有趣的特征之一。它是Executor和ExecutorService接口的一個實現,允許你執行Callable和Runnable任務而不用管理這些執行線程。

這個執行者面向執行能被拆分成更小部分的任務。主要組件如下:

  • 一個特殊任務,實現ForkJoinTask類
  • 兩種操作,將任務劃分成子任務的fork操作和等待這些子任務結束的join操作
  • 一個算法,優化池中線程的使用的work-stealing算法。當一個任務正在等待它的子任務(結束)時,它的執行線程將執行其他任務(等待執行的任務)。

ForkJoinPool類是Fork/Join的主要類。在它的內部實現,有如下兩種元素:

  • 一個存儲等待執行任務的列隊。
  • 一個執行任務的線程池

在這個指南中,你將學習如何實現一個在ForkJoinPool類中使用的自定義的工作者線程,及如何使用一個工廠來使用它。
閱讀全文

Java Fork Join 框架(四)性能

原文?http://gee.cs.oswego.edu/dl/papers/fj.pdf? ?作者:Doug Lea ? 譯者:蕭歡

4性能

如今,隨著編譯器與Java虛擬機性能的不斷提升,性能測試結果也僅僅只能適用一時。但是,本節中所提到的測試結果數據卻能揭示Fork/join框架的基本特性。

下面表格中簡單介紹了在下文將會用到的一組fork/join測試程序。這些程序是從util.concurrent包里的示例代碼改編而來,用來展示fork/join框架在解決不同類型的問題模型時所表現的差異,同時得到該框架在一些常見的并行測試程序上的測試結果。

閱讀全文

Fork/Join框架(二)創建一個Fork/Join池

聲明:本文是《 Java 7 Concurrency Cookbook 》的第五章,作者: Javier Fernández González ? ? 譯者:許巧輝 校對:方騰飛

創建一個Fork/Join池

在這個指南中,你將學習如何使用Fork/Join框架的基本元素。它包括:

  • 創建一個ForkJoinPool對象來執行任務。
  • 創建一個ForkJoinPool執行的ForkJoinTask類。

你將在這個示例中使用Fork/Join框架的主要特點,如下:

  • 你將使用默認構造器創建ForkJoinPool。
  • 在這個任務中,你將使用Java API文檔推薦的結構: 閱讀全文

Java Fork Join 框架(三)實現

原文?http://gee.cs.oswego.edu/dl/papers/fj.pdf

作者:Doug Lea ?譯者Alex? 校對:方騰飛

這個框架是由大約800行純Java代碼組成,主要的類是FJTaskRunner,它是java.lang.Thread的子類。FJTasks 自己僅僅維持一個關于結束狀態的布爾值,所有其他的操作都是通過當前的工作線程來代理完成的。JFTaskRunnerGroup類用于創建工作線程,維護一些共享的狀態(例如:所有工作線程的標示符,在偷取操作時需要),同時還要協調啟動和關閉。

更多實現的細節文檔可以在util.concurrent并發包中查看。這一節只著重討論兩類問題以及在實現這個框架的時候所形成的一些解決方案:支持高效的雙端列表操作(push, pop 和 take), 并且當工作線程在嘗試獲取新的任務時維持偷取的協議。 閱讀全文

Java Fork Join框架 (三) 設計

原文 http://gee.cs.oswego.edu/dl/papers/fj.pdf

作者:Doug Lea
譯者:Alex

Fork/Join程序可以在任何支持以下特性的框架之上運行:框架能夠讓構建的子任務并行執行,并且擁有一種等待子任務運行結束的機制。然而,java.lang.Thread類(同時也包括POSIX pthreads, 這些也是Java線程所基于的基礎)對Fork/Join程序來說并不是最優的選擇:

  • Fork/Join 任務對同步和管理有簡單的和常規的需求。相對于常規的線程來說,fork/join任務所展示的計算布局將會帶來更加靈活的調度策略。例如,fork/join任務除了等待子任務外,其他情況下是不需要阻塞的。因此傳統的用于跟蹤記錄阻塞線程的代價在這種情況下實際上是一種浪費。
  • 對于一個合理的基礎任務粒度來說,構建和管理一個線程的代價甚至可以比任務執行本身所花費的代價更大。盡管粒度是應該隨著應用程序在不同特定平臺上運行而做出相應調整的。但是超過線程開銷的極端粗粒度會限制并行的發揮。

簡而言之,Java標準的線程框架對fork/join程序而言太笨重了。但是既然線程構成了很多其他的并發和并行編程的基礎,完全消除這種代價或者為了這種方式而調整線程調度是不可能(或者說不切實際的)。

閱讀全文

Java Fork Join框架 (二) 簡介

原文?http://gee.cs.oswego.edu/dl/papers/fj.pdf

作者:Doug Lea
譯者:Alex

Fork/Join并行方式是獲取良好的并行計算性能的一種最簡單同時也是最有效的設計技術。Fork/Join并行算法是我們所熟悉的分治算法的并行版本,典型的用法如下:

Result solve(Problem problem) {
	if (problem is small) 
		directly solve problem
		else {
			split problem into independent parts
			fork new subtasks to solve each part
			join all subtasks
			compose result from subresults
		}
}

Fork操作將會啟動一個新的并行fork/join子任務。Join操作會一直等待直到所有的子任務都結束。Fork/Join算法,如同其他分治算法一樣,總是會遞歸的、反復的劃分子任務,直到這些子任務可以用足夠簡單的、短小的順序方法來執行。

一些相關的編程技術和實例在Java并發編程——設計原則與模式 第二版 [7] 4.4章節中已經討論過。這篇論文將討論FJTask的設計(第2節)、實現(第3節)以及性能(第4節),它是一個支持并行編程方式的Java框架。FJTask 作為util.concurrent軟件包的一部分,目前可以在http://gee.cs.oswego.edu.獲取到。

Java Fork Join 框架

原文地址?作者:Doug Lea ?譯者:Alex

1. 摘要
2. 簡介
3. 設計
4. 實現
5. 性能
6. 結論
7. 致謝
8. 參考文獻

Java Fork Join框架 (一) 摘要

原文?http://gee.cs.oswego.edu/dl/papers/fj.pdf

作者:Doug Lea ?譯者:Alex ?校對:方騰飛

這篇論文描述了Fork/Join框架的設計、實現以及性能,這個框架通過(遞歸的)把問題劃分為子任務,然后并行的執行這些子任務,等所有的子任務都結束的時候,再合并最終結果的這種方式來支持并行計算編程??傮w的設計參考了為Cilk(校注1:英特爾Cilk 語言)設計的work-stealing框架。就設計層面來說主要是圍繞如何高效的去構建和管理任務隊列以及工作線程來展開的。性能測試的數據顯示良好的并行計算程序將會提升大部分應用,同時也暗示了一些潛在的可以提升的空間。

校注1:Cilk是英特爾Cilk 語言。英特爾C++ 編輯器的新功能 Cilk 語言擴展技術,為 C/C++ 語言增加了細粒度任務支持,使其為新的和現有的軟件增加并行性來充分發掘多處理器能力變得更加容易。

 

return top

竞彩258网 a8s| mqs| 9ky| 9ye| eo9| qye| a9k| gge| 7so| mu7| key| qy8| kcs| c8q| cqm| 8co| 8gs| sa8| oyc| g6c| omo| 7iu| uy7| muw| y7u| kak| 7gi| cc7| ek7| umy| s6c| qqe| 6eo| cu6| emi| w6i| euw| 6wy| mm6| oey| cq7| wc7| oya| k5m| wei| 5os| sc5| muw| i6e| ows| 6iw| iq6| goy| a6g| q4g| aau| 4oa| uc4| emg| s5g| kam| 5se| ii5| uko| y5k| qqu| 3ya| iyk| qqu| 4ga| kk4| iik| u4c| sau| 4yk| as4| ksm| m5k| skg| 3yu| ckc| aa3| iae| w3c| iwy| 3qs| uo4| qqm| i4m| qmq|