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

Программа курса «Multicore programming in Java»

Добрый день.
Меня зовут Головач Иван, я руковожу небольшой образовательной компанией. Мы занимаемся удаленным Java-образованием [1].

Хотелось бы услышать мнение сообщества по поводу

  1. программы курса «Multicore programming in Java»
  2. литературы к курсу

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

Программа курса

Модуль #1: Между “железом” и “математикой”, примитивы

  • “железо”
    • архитектура современных процессоров, кэши
    • 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 (Java 5)

  • многопоточные коллекции
    • BlockingQueue-s
    • ConcurrentMap-s: ConcurrentHashMap, ConcurrentSkipListMap
    • copy-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 (java 7) + Parallel Streams (Java 8)

  • 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 (Clojure)
    • библиотека clojure.lang.*
    • плюсы и минусы архитектур на транзакционной памяти
  • Persistent Data Structures
    • плюсы и минусы персистентных структур данных
    • персистентные реализации основных структур данных: stack, queue, deque, hashtable, treemap
    • библиотеки: clojure.lang.*, pcollections

Литература

Книги

Статьи

Блоги

Контакты

skype: GolovachCourses
email: GolovachCourses@gmail.com

Автор: IvanGolovach

Источник [15]


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

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

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

[1] удаленным Java-образованием: http://youtube.com/user/KharkovITCourses

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

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

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

[5] “Disruptor: High performance alternative to bounded queues for exchanging data between concurrent threads”: http://disruptor.googlecode.com/files/Disruptor-1.0.pdf

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

[7] “The JSR-133 Cookbook for Compiler Writers”: http://gee.cs.oswego.edu/dl/jmm/cookbook.html

[8] “Double-checked locking: Clever, but broken”: http://www.javaworld.com/article/2074979/java-concurrency/double-checked-locking--clever--but-broken.html

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

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

[11] “The java.util.concurrent Synchronizer Framework”: http://gee.cs.oswego.edu/dl/papers/aqs.pdf

[12] “A Java Fork/Join Framework”: http://gee.cs.oswego.edu/dl/papers/fj.pdf

[13] “Mechanical Sympathy”: http://mechanical-sympathy.blogspot.com/

[14] “Рабочие заметки”: http://cheremin.blogspot.com/

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