Добрый день.
Меня зовут Головач Иван, я буду уже второй раз вести спецкурс-вебинар «Multicore programming in Java». В этой статье предлагаю на рассмотрение программу курса и наиболее полезные ссылки по вопросам многопоточности в Java.
Кратко о курсе: стартует 1 сентября, ведется в режиме вебинаров дважды в неделю (понедельник + четверг) в 19.00-22.00 (по московскому времени), состоит из 16 лекций по 2.5 часа (=40 лекционных часов), рассчитан на Java Middle.
1. Модуль #1: Между hardware и New JMM
1.1 Программа модуля
1.2 Литература к модулю
2. Модуль #2: java.util.concurrent
2.1 Программа модуля
2.2 Литература к модулю
3. Модуль #3: Fork/Join Framework + Parallel Streams
3.1 Программа модуля
3.2 Литература к модулю
4. Модуль #4: “Неклассические архитектуры”
4.1 Программа модуля
4.2 Литература к модулю
Модуль #1: Между hardware и New JMM
- “Железо”
- Архитектура современных процессоров, кэши
- Memory barriers, read/write reordering, протоколы когерентности кэшей
- “Математика”/Java Memory Model
- New JMM — описание «на пальцах»
- Какие гарантии дают Thread.start()/join(), volatile, final, CAS, lazySet, weakCompareAndSet, классы из j.u.c
- Формальная спецификация New JMM: happens-before edge, commitment protocol
- Примитивы/конструкции
- Double checked locking (broken), safe publishing
- synchronized+Object.wait()/notify()/notifyAll() — как использовать, какие гарантии, как реализовано в HotSpot
- Реализуем свои: Dekker's algorithm, Peterson's algorithm, Lamport Bakery algotithm
- Литература по «железу» (для старта)
- Литература по «железу» (для серьезных людей)
- «A Primer on Memory Consistency and Cache Coherence» — двухсотстраничный туториал по реализации согласованности кэшей в процессорах
- «What Every Programmer Should Know About Memory» — стостраничный мануал по устройству памяти (регистры, кэши, конерентность, DMA, атомики)
- «The Architecture of the Nehalem Processor and Nehalem-EP SMP Platforms» — ну или просто описание современного Intel Nehalem.
- Литература по Java Memory Model (для старта)
- JSR 133 (Java Memory Model) FAQ + перевод — краткий обзор.
- Doug Lea's JSR-133 cookbook — как JMM реализуется разработчиками компиляторов на «железе».
- Brian Goetz, «Double-checked locking: Clever, but broken»
- The «Double-Checked Locking is Broken» Declaration
- Литература по Java Memory Model (для серьезных людей)
- The Java Memory Model — формальное и точное описание New JMM.
Модуль #2: java.util.concurrent
- Многопоточные коллекции
- BlockingQueue-s
- ConcurrentMap-s: ConcurrentHashMap, ConcurrentSkipListMap
- Сopy-on-write structures: CopyOnWriteArrayList, CopyOnWriteArraySet
- “Синхронизаторы”
- Lock, Condition, ReentrantLock, ReentrantReadWriteLock, Semaphore
- CountDownLatch, CyclicBarrier, Exchanger, Phaser
- Пул потоков + Future
- Executors, ExecutorService, ThreadPoolExecutor, ScheduledExecutorService, ScheduledThreadPoolExecutor
- Callable, Future, чего не хватает j.u.c.Future
- Ядро j.u.c: AbstractQueuedSynchronizer + LockSupport
- Внутреннее устройство j.u.c.AQS
- Строим свои примитивы на j.u.c.AQS + LockSupport
- Литература по java.util.concurrent (для старта)
- The Java Tutorial: Concurrency
- Package java.util.concurrent Description
- javadoc: java.util.concurrent.locks.Lock
- javadoc: java.util.concurrent.locks.Condition
- javadoc: java.util.concurrent.Executor
- java.util.concurrent.ExecutorService
- javadoc: java.util.concurrent.CountDownLatch
- java.util.concurrent.CyclicBarrier
- java.util.concurrent.Exchanger
- java.util.concurrent.Phaser
- java.util.concurrent.Semaphore
- Литература по java.util.concurrent (для серьезных людей)
Модуль #3: Fork/Join Framework + Parallel Streams
- Fork/Join Framework
- Решаем задачи в стиле рекурсивного параллелизма
- Идиомы и типичные задачи
- Fork/Join Framework — что «под капотом»
- Parallel Streams
- Java 8 — работаем с данными через java.util.Stream
- java.util.Stream.parallel() — что «под капотом»
- Литература по Fork/Join Framework (для старта)
- Литература по Fork/Join Framework (для серьезных людей)
- Doug Lea, «A Java Fork/Join Framework» — автор F/J рассказывает о своем детище.
- java.util.concurrent.CountedCompleter
- Литература по Parallel Streams (для старта)
Модуль #4: “Неклассические архитектуры”
- Non-blocking algorithm
- Пакет j.u.c.atomic: AtomicXXX, AtomicXXXArray, AtomicXXXFieldUpdater, AtomicStampedReference, AtomicMarkableReference
- Классификация: blocking, non-blocking, lock-free, wait-free, obstruction free
- Неблокирующие реализации основных структур данных: stack, queue, deque, hashtable, treemap
- Архитектуры на основе передачи сообщений (Akka)
- Библиотека Akka
- Основные шаблоны, типовые архитектуры
- Плюсы и минусы архитектур на основе передачи сообщений
- Software Transactional Memory (STM)
- Библиотека clojure.lang.*
- Плюсы и минусы архитектур на основе транзакционной памяти
- Persistent Data Structures
- Плюсы и минусы персистентных структур данных
- Персистентные реализации основных структур данных
- Библиотека pcollections
- Литература по неблокирующим алгоритмам (для старта)
- Package java.util.concurrent.atomic
- wiki: Non-blocking algorithm
- wiki: ABA problem
- wiki: Compare-and-swap
- Литература по неблокирующим алгоритмам (для серьезных людей)
- Литература по архитектуре на основе передачи сообщений (для старта)
- wiki: Actor model
- Akka: Terminology, Concepts
- Akka: Actor Systems
- Akka: What is an Actor?
- Akka: Supervision and Monitoring
- Akka: Actor References, Paths and Addresses
- Akka: Akka and the Java Memory Model
- Литература по архитектуре на основе передачи сообщений (для серьезных людей)
- Литература по Persistent Data Structures (для старта)
- Литература по Persistent Data Structures (для серьезных людей)
Общая литература
В предыдущих раздела я рассматривал ссылки по конкретным темам конкретных модулей, однако, есть три очень хороших книги, которые стоит буквально читать целиком. Не хотелось «раздергивать их на главы», вот они
- Brian Goetz и другие, “Java Concurrency in Practice”
- Doug Lea, “Concurrent Programming in Java: Design Principles and Pattern”
- Maurice Herlihy, Nir Shavit, “The Art of Multiprocessor Programming”
Контакты
Стоимость курса
— при оплате до 9 августа — 375$
— при оплате до 16 августа — 400$
— при оплате до 23 августа — 425$
— при оплате до 30 августа — 450$
Я занимаюсь онлайн обучением Java (вот курсы программирования) и публикую часть учебных материалов в рамках переработки курса Java Core. Видеозаписи лекций в аудитории Вы можете увидеть на youtube-канале, возможно, видео канала лучше систематизировано в этой статье.
На все вопросы с удовольствием отвечу по следующим контактам (или в комментариях)
skype: GolovachCourses
email: GolovachCourses@gmail.com
Автор: IvanGolovach