package kr.debop4j.core.parallelism; import com.google.common.base.Stopwatch; import lombok.extern.slf4j.Slf4j; import org.junit.Test; import java.util.concurrent.ForkJoinPool; /** * pudding.pudding.commons.parallelism.forkjoin.FibonacciTest * * @author 배성혁 ( sunghyouk.bae@gmail.com ) * @since 12. 9. 28. */ @Slf4j public class FibonacciTest { private static final int N = 32; @Test public void sillyWorkerTest() { Stopwatch stopwatch = new Stopwatch(); stopwatch.start(); FibonacciProblem bigProblem = new FibonacciProblem(N); long result = bigProblem.solve(); stopwatch.stop(); if (log.isDebugEnabled()) { log.debug("Computing Fibonacci number=[{}]", N); log.debug("Computed Result=[{}]", result); log.debug("Silly Worker=" + stopwatch.toString()); } } @Test public void forkJoinWorkerTest() { int processors = Runtime.getRuntime().availableProcessors(); if (log.isDebugEnabled()) log.debug("process count=[{}]", processors); Stopwatch stopwatch = new Stopwatch(); stopwatch.start(); FibonacciProblem bigProblem = new FibonacciProblem(N); FibonacciTask task = new FibonacciTask(bigProblem); ForkJoinPool pool = new ForkJoinPool(processors); pool.invoke(task); long result = task.getResult(); stopwatch.stop(); if (log.isDebugEnabled()) { log.debug("Computing Fibonacci number=[{}]", N); log.debug("Computed result=[{}]", result); log.debug("ForkJoin Worker=" + stopwatch.toString()); } } }