Fork and Join Framework Bura Gne Fork and
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 join alt görevleri birleştir Sonuç } }
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.
Fork and Join Framework • Fork. Join Framework’ü Java 7 standart kütüphanelerinin parçasıdır. • Bilgisayarınızda kullanabilmeniz için JDK 7’ nin ve uygun bir IDE’nin kurulu olması yeterli olacaktır.
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.
Fork and Join Framework
Fork and Join Framework • Aşağıdaki 4 yapı Fork and Join Framework’ü için önem taşımaktadır. Fork. Join. Pool Recursive. Task Fork. Join. Task Recursive. Action
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: Fork. Join. Pool içinde soyut bir sınıftan(java. util. concurrent) türemiş task olarak çalışır. Birden çok sayıda yeni tasklar oluşturmakiçin fork() vejoin. fork() metodlarını kullanır.
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.
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 }
Fork and Join Framework • Recursive. Action: Görevlerinizin bir sonuç dönmesi gerekmiyorsa recursive action alt sınıfını kullanabilirsiniz. • Recursive. Task: 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.
Fork and Join Framework Fork. Join. Pool fjpool = new Fork. Join. Pool(); for (int i = 0; i < iterations; i++) { Recursive. Action task = new Random. Fill. Action(array, 0, array. length); long start = System. current. Time. Millis(); fjpool. invoke(task);
Fork and Join Framework class Random. Fill. Action extends Recursive. Action { if (high - low > split. Size) { // task büyükse parçala int mid = (low + high) >>> 1; invoke. All(as. List(new Random. Fill. Action(array, low, mid), new Random. Fill. Action(array, mid, high))); } else { Random random = new Random(); for (int i = low; i < high; i++) { array[i] = random. next. Int(10000); }
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
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
Fork and Join Framework
Fork and Join Framework
Fork and Join Framework • Uygulamalar
Fork and Join Framework Teşekkürler
- Slides: 19