- PVSM.RU - https://www.pvsm.ru -

Программа и материалы курса «Multicore programming in Java»

Добрый день.
Меня зовут Головач Иван, я буду уже второй раз [1] вести спецкурс-вебинар «Multicore programming in Java». В этой статье предлагаю на рассмотрение программу курса и наиболее полезные ссылки по вопросам многопоточности в Java.

Кратко о курсе: стартует 1 сентября, ведется в режиме вебинаров дважды в неделю (понедельник + четверг) в 19.00-22.00 (по московскому времени), состоит из 16 лекций по 2.5 часа (=40 лекционных часов), рассчитан на Java Middle.

1. Модуль #1: Между hardware и New JMM [2]
1.1 Программа модуля [3]
1.2 Литература к модулю [4]
2. Модуль #2: java.util.concurrent [5]
2.1 Программа модуля [6]
2.2 Литература к модулю [7]
3. Модуль #3: Fork/Join Framework + Parallel Streams [8]
3.1 Программа модуля [9]
3.2 Литература к модулю [10]
4. Модуль #4: “Неклассические архитектуры” [11]
4.1 Программа модуля [12]
4.2 Литература к модулю [13]

Модуль #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


Литература к модулю

Модуль #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


Литература к модулю

Модуль #3: Fork/Join Framework + Parallel Streams


Программа модуля

  • Fork/Join Framework
    • Решаем задачи в стиле рекурсивного параллелизма
    • Идиомы и типичные задачи
    • Fork/Join Framework — что «под капотом»
  • Parallel Streams
    • Java 8 — работаем с данными через java.util.Stream
    • java.util.Stream.parallel() — что «под капотом»


Литература к модулю

Модуль #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


Литература к модулю

Общая литература

В предыдущих раздела я рассматривал ссылки по конкретным темам конкретных модулей, однако, есть три очень хороших книги, которые стоит буквально читать целиком. Не хотелось «раздергивать их на главы», вот они

Контакты

Стоимость курса
— при оплате до 9 августа — 375$
— при оплате до 16 августа — 400$
— при оплате до 23 августа — 425$
— при оплате до 30 августа — 450$

Я занимаюсь онлайн обучением Java (вот курсы программирования [67]) и публикую часть учебных материалов в рамках переработки курса Java Core [68]. Видеозаписи лекций в аудитории Вы можете увидеть на youtube-канале [69], возможно, видео канала лучше систематизировано в этой статье [70].

На все вопросы с удовольствием отвечу по следующим контактам (или в комментариях)
skype: GolovachCourses
email: GolovachCourses@gmail.com

Автор: IvanGolovach

Источник [71]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/java/66427

Ссылки в тексте:

[1] уже второй раз: http://habrahabr.ru/company/golovachcourses/blog/217051/

[2] 1. Модуль #1: Между hardware и New JMM: #1

[3] 1.1 Программа модуля: #1_1

[4] 1.2 Литература к модулю: #1_2

[5] 2. Модуль #2: java.util.concurrent: #2

[6] 2.1 Программа модуля: #2_1

[7] 2.2 Литература к модулю: #2_2

[8] 3. Модуль #3: Fork/Join Framework + Parallel Streams: #3

[9] 3.1 Программа модуля: #3_1

[10] 3.2 Литература к модулю: #3_2

[11] 4. Модуль #4: “Неклассические архитектуры”: #4

[12] 4.1 Программа модуля: #4_1

[13] 4.2 Литература к модулю: #4_2

[14] Martin Thompson, «Mechanical Sympathy»: http://mechanical-sympathy.blogspot.com/

[15] Руслан Черемин, «Рабочие заметки»: http://cheremin.blogspot.com/

[16] «A Primer on Memory Consistency and Cache Coherence»: https://class.stanford.edu/c4x/Engineering/CS316/asset/A_Primer_on_Memory_Consistency_and_Coherence.pdf

[17] «What Every Programmer Should Know About Memory»: http://diyhpl.us/~bryan/papers2/distributed/distributed-systems/what-every-programmer-should-know-about-memory.2007.pdf

[18] «The Architecture of the Nehalem Processor and Nehalem-EP SMP Platforms»: http://sc.tamu.edu/systems/eos/nehalem.pdf

[19] JSR 133 (Java Memory Model) FAQ: http://www.cs.umd.edu/~pugh/java/memoryModel/jsr-133-faq.html

[20] перевод: http://habrahabr.ru/company/golovachcourses/blog/221133/

[21] Doug Lea's JSR-133 cookbook: http://gee.cs.oswego.edu/dl/jmm/cookbook.html

[22] Brian Goetz, «Double-checked locking: Clever, but broken»: http://www.javaworld.com/article/2074979/java-concurrency/double-checked-locking--clever--but-broken.html

[23] The «Double-Checked Locking is Broken» Declaration: http://www.cs.umd.edu/~pugh/java/memoryModel/DoubleCheckedLocking.html

[24] The Java Memory Model: https://dl.dropboxusercontent.com/u/1011627/journal.pdf

[25] The Java Tutorial: Concurrency: http://docs.oracle.com/javase/tutorial/essential/concurrency/

[26] Package java.util.concurrent Description: http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/package-summary.html#package.description

[27] javadoc: java.util.concurrent.locks.Lock: http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Lock.html

[28] javadoc: java.util.concurrent.locks.Condition: http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/Condition.html

[29] javadoc: java.util.concurrent.Executor: http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Executor.html

[30] java.util.concurrent.ExecutorService: http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/ExecutorService.html

[31] javadoc: java.util.concurrent.CountDownLatch: http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountDownLatch.html

[32] java.util.concurrent.CyclicBarrier: http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CyclicBarrier.html

[33] java.util.concurrent.Exchanger: http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Exchanger.html

[34] java.util.concurrent.Phaser: http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Phaser.html

[35] java.util.concurrent.Semaphore: http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/Semaphore.html

[36] “Java Concurrency in Practice”: http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601/

[37] Doug Lea, «The java.util.concurrent Synchronizer Framework»: http://gee.cs.oswego.edu/dl/papers/aqs.pdf

[38] javadoc: java.util.concurrent.locks.LockSupport: http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/LockSupport.html

[39] javadoc: java.util.concurrent.locks.AbstractQueuedSynchronizer: http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/locks/AbstractQueuedSynchronizer.html

[40] Fork/Join Framework в Java 7: http://habrahabr.ru/post/128985/

[41] Doug Lea, «A Java Fork/Join Framework»: http://gee.cs.oswego.edu/dl/papers/fj.pdf

[42] java.util.concurrent.CountedCompleter: http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/CountedCompleter.html

[43] javadoc: java.util.stream.Stream: http://docs.oracle.com/javase/8/docs/api/java/util/stream/Stream.html

[44] Package: java.util.stream: http://docs.oracle.com/javase/8/docs/api/java/util/stream/package-summary.html

[45] java.util.Spliterator: http://docs.oracle.com/javase/8/docs/api/java/util/Spliterator.html

[46] State of the Lambda: http://cr.openjdk.java.net/~briangoetz/lambda/lambda-state-final.html

[47] State of the Lambda: Libraries Edition: http://cr.openjdk.java.net/~briangoetz/lambda/lambda-libraries-final.html

[48] Java 8 Lambdas: Pragmatic Functional Programming: http://www.amazon.com/Java-Lambdas-Pragmatic-Functional-Programming/dp/1449370772

[49] Package java.util.concurrent.atomic: http://docs.oracle.com/javase/8/docs/api/java/util/concurrent/atomic/package-summary.html#package.description

[50] wiki: Non-blocking algorithm: http://en.wikipedia.org/wiki/Non-blocking_algorithm

[51] wiki: ABA problem: http://en.wikipedia.org/wiki/ABA_problem

[52] wiki: Compare-and-swap: http://en.wikipedia.org/wiki/Compare-and-swap

[53] Maurice Herlihy, «Wait-Free Synchronization»: http://cs.brown.edu/~mph/Herlihy91/p124-herlihy.pdf

[54] wiki: Actor model: http://en.wikipedia.org/wiki/Actor_model

[55] Akka: Terminology, Concepts: http://doc.akka.io/docs/akka/2.3.4/general/terminology.html

[56] Akka: Actor Systems: http://doc.akka.io/docs/akka/2.3.4/general/actor-systems.html

[57] Akka: What is an Actor?: http://doc.akka.io/docs/akka/2.3.4/general/actors.html

[58] Akka: Supervision and Monitoring: http://doc.akka.io/docs/akka/2.3.4/general/supervision.html

[59] Akka: Actor References, Paths and Addresses: http://doc.akka.io/docs/akka/2.3.4/general/index.html

[60] Akka: Akka and the Java Memory Model: http://doc.akka.io/docs/akka/2.3.4/general/jmm.html

[61] Jamie Allen, «Effective Akka»: http://www.amazon.com/Effective-Akka-Jamie-Allen/dp/1449360076/

[62] wiki: Persistent data structure: http://en.wikipedia.org/wiki/Persistent_data_structure

[63] pcollections.org: http://pcollections.org/

[64] Chris Okasaki, «Purely Functional Data Structures»: http://www.amazon.com/Purely-Functional-Structures-Chris-Okasaki/dp/0521663504

[65] “Concurrent Programming in Java: Design Principles and Pattern”: http://www.amazon.com/Concurrent-Programming-Java-Principles-Pattern/dp/0201310090/

[66] “The Art of Multiprocessor Programming”: http://www.amazon.com/The-Multiprocessor-Programming-Revised-Reprint/dp/0123973376/

[67] курсы программирования: http://golovachcourses.com

[68] курса Java Core: http://habrahabr.ru/company/golovachcourses/blog/218841/

[69] youtube-канале: http://www.youtube.com/user/KharkovITCourses

[70] этой статье: http://habrahabr.ru/company/golovachcourses/blog/215275/

[71] Источник: http://habrahabr.ru/post/231755/