Средства распараллеливания в Java 1.7 (jsr166y...) Михаил Пономаренко, Tech Lead компании Sigma Ukraine
Содержание
- 2. немного истории до java 1.5 были wait notify synchonized в 1.5 - jsr166 java.util.concurrent Future, ThreadExecutor
- 3. немного истории в 1.6 - jsr166x BlockingDeque ConcurrentNavigableMap, NavigableMap в 1.7 - jsr166y ForkJoinPool Phaser ParallelArray
- 4. java.util.concurrent.Phaser
- 5. java.util.concurrent.Phaser void startTasks(List tasks, final int iterations) { final Phaser phaser = new Phaser() { protected
- 6. Fork Join – рекурсивная декомпозиция если задача маленькая - посчитать если большая разбить и посчитать рекурсивно
- 7. JDK7 дает возможность дробить мелко Минимум взаимодействия Fork Join – рекурсивная декомпозиция
- 8. ForkJoin задача 1 2 3 ответ 4
- 9. Детали реализации дополнительной сихронизации не требуется старые разбиения "больше“ Поэтому: У каждого потока свой дек задачь
- 10. Детали реализации готово 100 100 готово готово Готово 50 50
- 11. ForkJoinTask protected abstract boolean exec() ForkJoinTask fork() Не ждет public final V join() То же но
- 12. RecursiveAction extends ForkJoinTask protected void compute() Посчитать Поделить Вызвать invokeAll Сделать join Нужно что то сделать,
- 13. Примеры Doug Lea
- 14. Результаты Doug Lea Быстрее раз процессоров
- 15. Пример 2^28 произвольных чисел double (2 гб) ForkJoinPool pool = new ForkJoinPool(p); SinCosHuge task = new
- 16. Пример import java.util.concurrent.RecursiveTask; public class SinCosHuge extends RecursiveTask { … protected Double compute() { if (to
- 17. Мои измерения Загрузка процессора 100% температура
- 18. Мои измерения, время выполнения. потоков время
- 19. потоков Во сколько раз медленнее минус один
- 20. Мои измерения – относительно самого быстрого потоков Относительная разница в скорости. %
- 21. А если по старому? ThreadExecutorPool Result add(double) waitDone fork ThreadPoolExecutor tpe = new ThreadPoolExecutor(p, p, 10,SECONDS,
- 22. Runnable.run if (to - from double rz = 0; for (int i = from; i rz
- 23. А если по старому? потоков Во сколько раз медленнее минус один
- 24. А если по старому Относительная разница в скорости. % Ниже = лучше потоков
- 25. ParallelArray Судя по всему НЕ попадет в JDK 1.7, но исходники доступны MapReduce в пределах одной
- 26. Пример IBM ParallelArray students = new ParallelArray (fjPool, data); double bestGpa = students.withFilter(isSenior).withMapping(selectGpa).max(); public class Student
- 27. Мой пример new long[16384 * 16384/8] - 1 гб рабочей памяти, double[16384 * 16384/2] – 6гб
- 28. Результаты потоков Во сколько раз медленнее
- 30. Скачать презентацию