Добрый день.
Меня зовут Головач Иван, я руковожу небольшой образовательной компанией. Мы занимаемся удаленным Java-образованием.
Хотелось бы услышать мнение сообщества по поводу
- программы курса «Multicore programming in Java»
- литературы к курсу
Кратко о курсе: стартует 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
Литература
Книги
- 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”
Статьи
- Martin Thompson, etc, “Disruptor: High performance alternative to bounded queues for exchanging data between concurrent threads”
- Ulrich Drepper, “What Every Programmer Should Know About Memory”
- Doug Lea, “The JSR-133 Cookbook for Compiler Writers”
- Brian Goetz, “Double-checked locking: Clever, but broken”
- The “Double-Checked Locking is Broken” Declaration
- Jeremy Manson, Brian Goetz, “JSR 133 (Java Memory Model) FAQ”
- Doug Lea, “The JSR-133 Cookbook for Compiler Writers”
- Doug Lea, “The java.util.concurrent Synchronizer Framework”
- Doug Lea, “A Java Fork/Join Framework”
Блоги
- Martin Thompson, “Mechanical Sympathy”
- Руслан Черемин, “Рабочие заметки”
Контакты
skype: GolovachCourses
email: GolovachCourses@gmail.com
Автор: IvanGolovach