1 / 19

Fork and Join Framework

Fork and Join Framework. Buğra Güneş . Fork and Join Framework. Result solve(Problem problem) { if (problem Küçük mü ? ) Sorunu Hemen Çöz! else { Problemi parçalara ayır fork  alt görevlere ayırma problemi çöz

norina
Download Presentation

Fork and Join Framework

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. Fork and Join Framework Buğra Güneş

  2. Fork and Join Framework • Result solve(Problem problem) { if (problem Küçük mü ?) Sorunu Hemen Çöz! else { Problemi parçalara ayır fork  alt görevlere ayırma problemi çöz join alt görevleri birleştir Sonuç } }

  3. Fork and Join Framework • Fork-Join bir problemi küçük parçalara bölerek, onları paralel olarak eş zamanlı çözmek ve çözümü nihayetinde birleştirerek sonuca ulaşma yaklaşımı baz alınrak geliştirilmiş framework(çatı)'tür. • Öncesinde JDK 5 içindede mevcut olan bu yapı , JDK 7'de de yerini almıştır.

  4. Fork and Join Framework • ForkJoin Framework’ü Java 7 standart kütüphanelerinin parçasıdır. • Bilgisayarınızda kullanabilmeniz için JDK7’ nin ve uygun bir IDE’nin kurulu olması yeterli olacaktır.

  5. Fork and Join Framework • Framework'ün gerçek anlamda performanslı çalışması için yüksek sayıda (onlarca) işlemci ile işlem yapılıyor olması gereklidir. • Multi-core(çok çekirdek) sistemler için dizayn edilmiştir. Genel olarak, 4 çekirdek ve üzeri sistemlerde performans olarak kısmen göze çarpabilir bu ise yapılacak işe göre değişkenlik gösterir. 

  6. Fork and Join Framework

  7. Fork and Join Framework • Aşağıdaki 4 yapı Fork and Join Framework’ü için önem taşımaktadır. ForkJoinPool RecursiveTask ForkJoinTask RecursiveAction

  8. Fork and Join Framework • Fork Join Pool :Framework’ün ana sınıfıdır, görevleri çalıştıran sorumlu birim fork join pool sınıfıdır. • Fork Join Task: ForkJoinPool içinde soyut bir sınıftan(java.util.concurrent) türemiş task olarak çalışır. Birden çok sayıda yeni tasklar oluşturmakiçinfork() vejoin.fork() metodlarını kullanır.

  9. Fork and Join Framework • fork() metodu daha küçük parçaya ayrılan yeni işi kuyruğa ekler. Her thread'in kendi kuyruğu var, ancak gerekirse diğer thread'ler iş çalma (work stealing) yapabilirler.compute() metodu daha küçük parçaya ayrılan yeni işi kuyruğa eklemeden mevcut thread ile çalıştırır.join() metodu kuyruktaki çalıştırılan işin bitmesini bekler.

  10. Fork and Join Framework • if (problem Küçük mü ?) Hemen Çöz! else { Alt Görevlere böl Görevleri işlet SONUÇLARIN TAMAMLANMASINI BEKLE }

  11. Fork and Join Framework • RecursiveAction:Görevlerinizin bir sonuç dönmesi gerekmiyorsa recursive action alt sınıfını kullanabilirsiniz. • RecursiveTask:Görevleriniz bir sonuç dönmesi gerekiyorsa recursive task alt sınıfını kullanabilirsiniz.Örneğin Fibonacci sayıları hesaplanırken , her görev bi sonraki göreve değer aktarmalıdır.Bu hesaplamada recursivetask kullanılır.

  12. Fork and Join Framework ForkJoinPool fjpool = new ForkJoinPool(); for (int i = 0; i < iterations; i++) { RecursiveAction task = new RandomFillAction(array, 0, array.length); long start = System.currentTimeMillis(); fjpool.invoke(task);

  13. Fork and Join Framework class RandomFillAction extends RecursiveAction { if (high - low > splitSize) { // task büyükse parçala int mid = (low + high) >>> 1; invokeAll(asList(new RandomFillAction(array, low, mid), new RandomFillAction(array, mid, high))); } else { Random random = new Random(); for (int i = low; i < high; i++) { array[i] = random.nextInt(10000); }

  14. Fork and Join Framework Fork Join Framework’ü kullanılmaksızın elde edilen çıktılar • Sequential processing time: 1360 ms • Sequential processing time: 1362 ms • Sequential processing time: 1338 ms • Sequential processing time: 1346 ms • Sequential processing time: 1304 ms • Sequential processing time: 1296 ms • Sequential processing time: 1309 ms • Sequential processing time: 1343 ms • Sequential processing time: 1351 ms • Sequential processing time: 1359 ms • Number of processor available: 4

  15. Fork and Join Framework Fork Join Framework’ü kullanılarak elde edilen çıktılar • Parallel processing time: 445 ms • Parallel processing time: 398 ms • Parallel processing time: 370 ms • Parallel processing time: 366 ms • Parallel processing time: 378 ms • Parallel processing time: 365 ms • Parallel processing time: 363 ms • Parallel processing time: 370 ms • Parallel processing time: 366 ms • Parallel processing time: 367 ms

  16. Fork and Join Framework

  17. Fork and Join Framework

  18. Fork and Join Framework • Uygulamalar

  19. Fork and Join Framework Teşekkürler

More Related