пʼятниця, 9 вересня 2011 р.

java.util.concurrent Tech Talk

Я тут подписался на Tech Talk о java.util.concurrent с целью нести свет в массы. Тема довольно интересна мне и довольно давно, но играть в КО не хочется и тратить время на то, что всем известно, когда можно с гораздо большим удовольствием есть пиво - тоже. Поэтому я добросовестно подготовил предварительный список тезисов для освещения. Комментарии и предложения - приветствуются.

Вот чего мне неизвестно так это сколько времени у меня будет, так что выложил программу-максимум. Также не имею ни малейшего понятия о том на сколько народ в теме. Хотелось бы получить фидбек от прожженных в многопоточности мастеров, что им было бы интересно. и на чем стоить заострить внимание.

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

Про примеры - они еще в процессе, точно будет пример, который можно развивать по мере доклада, но лайв-кодить я не буду, постараюсь выложить код где-нибуть

Итак агенда:

0. Интро
Введение в многопоточность - зачем, почему, когда и как - в общем короткое вступление, без которого никак
Кратко о базовых конструкциях языка для поддержки многопоточности - о Thread, Runnable, мониторах, synchronized-блоках. Тут же пример кода. Пару слов о Vector, Hashtable и synchronized-коллекциях
Мотивация к старту JSR166, картинки с мордами Дага Ли, Брайана Гетца, Дийкстры, Хоара и Бринч-Хансена

1. Подходы
Блокирующая и неблокирующая многопоточность - в чем разница

1.1. Блокирующая многопоточность
ReentrantLock vs native Java locks
Lock & Condition, тут же упомянем TimeUnit и как в ХХI веке спят потоки
Semaphore

1.2. Неблокирующая многпоточность
Atomic типы и как они устроены, CAS, пример кода
Атомарные операции на сложных shared state, про разные AtomicReference, пример кода
Краткое сравнение подходов

2. Распределение работы

Executor, ExecutorService, Сallable, Thread-пулы
Fork/Join framework (привет семерочка)
пример кода

3. Конкуррентные типы данных в JSR166

Опять слегка вспомним про Atomic типы
CopyOnWriteArrayList, ConcurrentHashMap, ConcurrentSkipListMap, ConcurrentSkipListSet, CopyOnWriteArraySet
перформанс Vector, Hashtable vs sync collections vs CopyOnWriteArrayList, ConcurrentHashMap - где то в закладках были графики
Немного об итераторах
Генерация случайных чисел, ThreadLocalRandom

4. Очереди
blocking queues and deques

5. Синхронизация потоков
CountDownLatch, CyclicBarrier, Exchanger

6. Что еще есть в мире Java кроме JSR166 - вот это не обещаю что успею, но если очень будет интересно, постараюсь
Disruptor http://code.google.com/p/disruptor/
NonBlockingConcurrentHashMap, http://sourceforge.net/projects/high-scale-lib

7. Чего ждать в Java 8 - тоже по заявкам
jsr166e: http://dhruba.name/2011/08/28/jsr166e-upcoming-java-util-concurrent-apis-for-java-8/

8. Q&A не планирую - все вопросы по ходу дела, в заключение забросаю книгами и ссылками.

Немає коментарів:

Дописати коментар