java 8. thread pools

Post on 15-Jul-2015

413 Views

Category:

Software

1 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Накрайников Олегuchonyy@gmail.com

Java 8. Thread Pools

Java. The well-known and not well-known

Пролог. Java Concurrency Timeline

JDK 1.0- JMM - Synchronizers- Thread

JDK 1.2 - Collections

Doug Lea- Concurrency

package

JDK 1.6- Deques

JDK 1.7- ForkJoinPool

JDK 1.8 - java.util.concurrent

JDK 1.5-JMM-java.util.concurrent

1996 1997 1998 2004 2011 20142006

Пролог. Пакет java.util.concurrent.*

Executors

AtomicsLocks Synchronizers

QueuesConcurrent collections

О чем поговорим сегодня

▪ Что такое пул потоков и для чего он нужен

▪ Интерфейсы и классы взаимодействия с пулами потоков

▪ Фабрика пулов Executors

▪ Классы задач

▪ ForkJoinPool

Паттерн Thread pool

Thread PoolJob providers

Task Task Task Task

Job Queue

Task

Worker

Worker

Worker

Worker

Submiter

Submiter

Submiter

Job providers. Две стратегии

Создание задачиПередача задания

1. Создаем задачу, которое содержит в себе задание2. Сообщаем задаче, что ей необходимо выполниться

1. Создаем задание – блок кода для, которой должен быть выполнен асинхронно.2. Передаем созданное задание исполнителю

Стратегии построения Thread pool

1. Work arbitrage: общий арбитр, разделяющий задачи. Например обычная blocking queue

2. Work dealing: у каждого свой набор задач, перегруженные потоки отдают свои задачи на сторону

3. Work stealing: у каждого свой набор задач, свободные потоки «крадут» задачи у перегруженных потоков

Work arbitrage

1. Direct handoffs: напрямую передаем задание свободному работнику, либо конструируем новый

2. Unbounded queues: задание попадает в очередь, из которой свободные работники забирают задания. Очередь не ограничена, число работников фиксированное

3. Bounded queues: задание попадает в очередь, из которой свободные работники забирают задания. Очередь и число работников ограничены

Интерфейсы пулов

Executor

ExecutorService

ScheduledExecutorService

ThreadPoolExecutor

Реализации пулов

ScheduledThreadPoolExecutor

Реализации заданий

Получение результата. Паттерн Future

Future<V>

Executors

Метод Описание

Executors.newCachedThreadPool() Core=0, Max = Integer.MAX_VALUE, AliveTime = 60 sec, Queue = SynchronousQueue

Executors.newFixedThreadPool(int n) Core=n, Max = n, AliveTime = 0 sec, Queue = LinkedBlockingQueue

Executors.newSingleThreadExecutor() Core=1, Max = 1, AliveTime = 0 sec, Queue = LinkedBlockingQueue

Executors.newScheduledThreadPool(int n) Core=n, Max = Integer.MAX_VALUE, AliveTime = 0 sec, Queue = DelayedWorkQueue

Executors.newSingleThreadScheduledExecutor() Core=1, Max = 1, AliveTime = 0 sec, Queue = DelayedWorkQueue

Executors.newWorkStealingPool()Executors.newWorkStealingPool(int n)

parallelism = Runtime.getRuntime().availableProcessors()parallelism = n

Классы задач. RecursiveTask<V>

Классы задач. RecursiveAction

Классы задач. CompletableFuture<V>

Sync Async Sync Async

ForkJoinPool

Все потоки ждут на join() пока выполнится один

Или вообще оказывается, что очередную задачу некому выполнить

join()

join()join()

join()

join()

join()

join()

join()

join()

join()

ForkJoinPool

1. Собственный пул: ForkJoinPool pool=new ForkJoinPool(int n);2. Общий пул: ForkJoinPool.commonPool() ;

• extends ExecutorService• принимает на исполнение Runnable, Callable, ForkJoinTask• внешне взаимодействие выглядит как с обычным пулом

Получить:

ForkJoinPool

………..

Worker queues

Submiters queues

………..

head tail

head tail

WorkerOther

workers

Submiters

ForkJoinPool. Производительность

Использованные источники

▪ Обзор java.util.concurrent.* [http://habrahabr.ru/company/luxoft/blog/157273/]

▪ Дмитрий Чуйко — Новинки в java.util.concurrent[https://www.youtube.com/watch?v=aMQJnigGvfY&list=PLVe-2wcL84b8T9aw7AaAj-Kir3CKABg55]

▪ Алексей Шипилёв — ForkJoinPool в Java 8[https://www.youtube.com/watch?v=t0dGLFtRR9c&list=PLVe-2wcL84b8T9aw7AaAj-Kir3CKABg55]

▪ Кей С. Хорстманн – Java SE 8. Вводный курс

Использованные источники

▪ Basic Java 7 Fork/Join Benchmark[http://joerglenhard.wordpress.com/2011/09/28/basic-java-7-forkjoin-benchmark/]

▪ Путеводитель по методам класса java.util.concurrent.CompletableFuture[http://habrahabr.ru/post/213319/]

Спасибо за внимание!

top related