...

четверг, 31 июля 2014 г.

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

Добрый день.

Меня зовут Головач Иван, я буду уже второй раз вести спецкурс-вебинар «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








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


  • Литература по «железу» (для старта)

  • Литература по «железу» (для серьезных людей)

  • Литература по Java Memory Model (для старта)

  • Литература по Java Memory Model (для серьезных людей)






Модуль #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 (для старта)

  • Литература по 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 (для серьезных людей)

  • Литература по 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








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


  • Литература по неблокирующим алгоритмам (для старта)

  • Литература по неблокирующим алгоритмам (для серьезных людей)

  • Литература по архитектуре на основе передачи сообщений (для старта)

  • Литература по архитектуре на основе передачи сообщений (для серьезных людей)

  • Литература по Persistent Data Structures (для старта)

  • Литература по Persistent Data Structures (для серьезных людей)


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




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

Контакты




Стоимость курса

— при оплате до 9 августа — 375$

— при оплате до 16 августа — 400$

— при оплате до 23 августа — 425$

— при оплате до 30 августа — 450$

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


На все вопросы с удовольствием отвечу по следующим контактам (или в комментариях)

skype: GolovachCourses

email: GolovachCourses@gmail.com


This entry passed through the Full-Text RSS service — if this is your content and you're reading it on someone else's site, please read the FAQ at http://ift.tt/jcXqJW.


Комментариев нет:

Отправить комментарий