SlideShare uma empresa Scribd logo
1 de 123
Baixar para ler offline
Общество	
  Мертвых	
  Потоков
Алексей	
  Федоров,	
  
Одноклассники	
  / JUG.ru
Зачем	
  вы	
  здесь?
3
Чего  не  будет  в  презентации
• Определений	
  из	
  учебника
- Больше	
  интересует	
  сама	
  концепция
• Сравнения	
  производительности
• Советов,	
  как	
  правильно	
  писать	
  код
• Холиваров*
• Серебряных	
  пуль,	
  волшебных	
  фреймворков и	
  т.п.
*	
  Нет,	
  ну	
  если	
  кто-­‐то	
  очень	
  захочет,	
  то	
  можно,	
  конечно…
4
А  что  будет-­то?
• Пара	
  простых	
  многопоточных	
  примеров
• Куча	
  связанных	
  с	
  ними	
  проблем
• Варианты	
  решений
- Которые,	
  разумеется,	
  не	
  работают
- Ну	
  некоторые	
  работают
- Иногда
- Наверное…
5
Пререквизиты
Нужно	
  примерно понимать,	
  что	
  такое
• Thread
• Runnable
• synchonized
• Lock lock = new ReentrantLock(false)
• volatile
• AtomicInteger
• Compare-And-Set
6
Стенд
• Apple	
  MacBook	
  Pro	
  Retina,	
  2014
- Intel	
  Core	
  i7
- 4	
  cores	
  x	
  2	
  threads	
  =	
  8	
  HW	
  threads
- 2,3	
  GHz
- 16	
  Gb	
  RAM
- Oracle	
  JDK	
  8	
  update	
  60
• Mac	
  OS	
  X	
  10.10.5
Проблема	
  обедающих	
  философов
Dijkstra,	
  1965
Hoare,	
  1985
Что	
  это?
8
• 5	
  философов	
  по	
  кругу
– Тарелка	
  с	
  едой	
  перед	
  каждым
– Вилки	
  между	
  тарелками
• Каждый	
  может
– Размышлять
– Брать	
  соседнюю	
  вилку
– Есть	
  (строго	
  двумя	
  вилками!)
– Класть	
  одну	
  вилку
Задача  о  философах
9
Проблемы  с  обедающими  философами
Пусть	
  каждый	
  философ	
  действует	
  по	
  
некоторому	
  алгоритму
• Могут	
  ли	
  все	
  философы	
  умереть	
  с	
  
голоду?
• Можно	
  ли	
  составить	
  такой	
  
алгоритм,	
  чтобы	
  все	
  философы	
  
гарантированно не	
  умерли	
  с	
  
голоду?
10
Параметры  задачи
• Количество	
  философов
• Есть	
  ли	
  возможность	
  положить	
  вилку,	
  не	
  пожрамши
• Сколько	
  времени	
  философ	
  ест
- Фиксированное	
  или	
  случайная	
  величина
• Сколько	
  времени	
  философ	
  размышляет
- Фиксированное	
  или	
  случайная	
  величина
- Как	
  это	
  время	
  соотносится	
  с	
  временем	
  еды
• Какие	
  ещё	
  инструменты/элементы	
  есть	
  в	
  системе?
• Что	
  ещё?
11
Фиксированное  время  и  случайное  время
• Случайное	
  время	
  задаётся	
  какой-­‐то	
  функцией	
  
распределения
• Константа	
  тоже задаётся	
  функцией	
  распределения
- (А	
  бывают	
  ли	
  вообще	
  константы	
  в	
  реальном	
  мире?)
12
Фиксированное  время  и  случайное  время
• Случайное	
  время	
  задаётся	
  какой-­‐то	
  функцией	
  
распределения
• Константа	
  тоже задаётся	
  функцией	
  распределения
- (А	
  бывают	
  ли	
  вообще	
  константы	
  в	
  реальном	
  мире?)
Решение
14
Пронумеруем  философов  и  вилки
1
2 3
4
5
1
2
3
4
5
Demo	
  1.	
  Сено-­‐солома
16
Простое  решение
• Когда	
  философ	
  хочет	
  есть,	
  он	
  делает	
  следующие	
  шаги:
1. Берёт	
  левую	
  от	
  себя	
  вилку	
  («сено»)
2. Берёт	
  правую	
  от	
  себя	
  вилку	
  («солома»)
3. Ест
4. Кладёт	
  одну	
  вилку
5. Кладёт	
  другую	
  вилку
6. Размышляет
• И	
  так	
  по	
  кругу
17
Моделирование  на  Java
18
Deadlock
19
Теория
21
Ресурсы  и  взаимоблокировка
Ресурс – объект,	
  к	
  которому	
  предоставляется	
  доступ
Во	
  время	
  работы	
  процесс	
  может	
  брать	
  (захватывать)	
  
ресурсы
22
Взаимоблокировка  (Deadlock)
Взаимоблокировка – такое	
  состояние	
  системы,	
  
при	
  котором	
  два	
  или	
  более	
  процессов	
  не	
  могут	
  
продолжать	
  своё	
  выполнение	
  из-­‐за	
  отсутствия	
  
необходимых	
  для	
  этого	
  ресурсов.
Каждый	
  ждёт	
  другого,	
  поэтому	
  никто	
  не	
  может	
  
продолжить
23
Выгружаемые  и  невыгружаемые  ресурсы
• Выгружаемые	
  ресурсы	
  — ресурсы,	
  которые	
  могут быть	
  
безболезненно	
  отобраны	
  у	
  процесса,	
  который	
  ими	
  обладает
• Невыгружаемые	
  ресурсы	
  — ресурсы,	
  которые	
  нельзя
отобрать	
  у	
  процесса,	
  не	
  вызвав	
  при	
  этом	
  сбой	
  в	
  вычислениях
• Мы	
  будем	
  говорить,	
  в	
  основном,	
  о	
  невыгружаемых	
  ресурсах
24
Операции  над  невыгружаемыми  ресурсами
• Запрос	
  ресурса
- Берём ресурс	
  
- или	
  ждём (встаём	
  в	
  «очередь»	
  ожидания)
• Использование	
  ресурса
• Освобождение	
  ресурса
25
Виды  блокирующих  запросов
• без	
  таймаута
• с	
  таймаутом
• с	
  исключением	
  (ошибкой)
26
Условия  возникновения  взаимоблокировок
Коффман,	
  1971
1. Условие	
  взаимного	
  исключения
2. Условие	
  удержания	
  и	
  ожидания
3. Условие	
  невыгружаемости
4. Условие	
  циклического	
  ожидания
27
Условие  взаимного  исключения
Каждый	
  ресурс	
  либо	
  выделен	
  в	
  данный	
  момент только	
  
одному процессу,	
  либо	
  доступен для	
  всех.
28
Условие  удержания  и  ожидания
Процессы,	
  удерживающие	
  в	
  данный	
  момент	
  ранее	
  
выделенные	
  им	
  ресурсы,	
  могут запрашивать	
  новые	
  
ресурсы.
29
Условие  невыгружаемости
Ранее	
  выделенные	
  ресурсы	
  не	
  могут	
  быть	
  принудительно	
  
отобраны у	
  процесса.	
  
Они	
  должны	
  быть	
  явным	
  образом	
  высвобождены	
  тем	
  
процессом,	
  который	
  их	
  удерживает.
30
Условие  циклического  ожидания
Должна	
  существовать	
  кольцевая	
  последовательность	
  из	
  
двух	
  и	
  более	
  процессов,	
  каждый	
  из	
  которых	
  ожидает	
  
высвобождения	
  ресурса,	
  удерживаемого	
  следующим	
  
членом	
  последовательности.
31
Моделирование  взаимоблокировок
Ресурс	
  занят Запрос	
  ресурса Взаимоблокировка
32
Моделирование  взаимоблокировок
Ресурс	
  занят Запрос	
  ресурса Взаимоблокировка
Граф	
  ожидания	
  (Holt,	
  1972)
33
Пример  графа  ресурсов
34
Условия  возникновения  взаимоблокировок  —
ещё  раз
Коффман,	
  1971
1. Условие	
  взаимного	
  исключения
2. Условие	
  удержания	
  и	
  ожидания
3. Условие	
  невыгружаемости
4. Условие	
  циклического	
  ожидания
Вопрос.	
  А	
  в	
  Java эти	
  условия	
  выполняются?
Стратегии	
  борьбы	
  с	
  блокировками
37
Стратегии  борьбы  с  блокировками
• Игнорирование	
  проблемы
• Обнаружение	
  и	
  восстановление
• Динамическое	
  уклонение
• Предотвращение	
  за	
  счёт	
  подавления	
  любого	
  из	
  
четырёх	
  условий	
  Коффмана
38
Кто  использует  стратегии  борьбы?
• Базы	
  данных
- Блокировки	
  на	
  строках,	
  таблицах,	
  индексах	
  и	
  т.д.
39
Кто  использует  стратегии  борьбы?
• Базы	
  данных
- Блокировки	
  на	
  строках,	
  таблицах,	
  индексах	
  и	
  т.д.
• JVM
40
Кто  использует  стратегии  борьбы?
• Базы	
  данных
- Блокировки	
  на	
  строках,	
  таблицах,	
  индексах	
  и	
  т.д.
• JVM
- А	
  вот	
  и	
  нет!
- Ручками,	
  ручками!
- Ну	
  и	
  головой…
41
Алгоритм  Страуса
(Делаем	
  вид,	
  что	
  проблема	
  отсутствует)
• Насколько	
  часто	
  возникает	
  проблема?
• Как	
  часто	
  возникают	
  сбои	
  в	
  системе	
  по	
  
другим	
  причинам?
• Насколько	
  серьёзны	
  могут	
  быть	
  
последствия?
42
Обнаружение  взаимоблокировок  и  
восстановление  работоспособности
• Шаги
- Позволить	
  блокировке	
  произойти
- Пытаться	
  обнаружить	
  момент	
  возникновения
- Попробовать	
  восстановить	
  работоспособность
В	
  нашем	
  примере	
  можно	
  просто	
  перезапускать	
  философов
43
Выход  из  взаимоблокировки
• Приоритетный	
  захват	
  ресурсов
- Приоритезировать (все)	
  процессы
- Отобрать	
  ресурс	
  у	
  менее	
  приоритетного	
  процесса
• Откат	
  (см.	
  след.	
  слайд)
• Уничтожение	
  и	
  перезапуск	
  процессов
44
Выход  из  взаимоблокировки  — Откат
• Периодически	
  создаются	
  контрольные	
  точки
• При	
  обнаружении	
  блокировки	
  происходит	
  откат
- При	
  откате	
  часть	
  работы	
  (которая	
  была	
  выполнена	
  
после	
  прохождения	
  последней	
  контрольной	
  точки)	
  
теряется
45
Уклонение  от  взаимоблокировки
• Алгоритм	
  банкира	
  (Дейкстра,	
  1965)
• В	
  основе	
  — идея	
  о	
  траекториях
46
Уклонение  от  взаимоблокировки
• Алгоритм	
  банкира	
  (Дейкстра,	
  1965)
• В	
  основе	
  — идея	
  о	
  траекториях
I,	
  scheduler
47
Модель  траекторий
48
Предотвращение  взаимоблокировки
• Атака	
  условия	
  взаимного	
  исключения
• Атака	
  условия	
  ожидания	
  и	
  удержания
• Атака	
  условия	
  циклического	
  ожидания
• Атака	
  условия	
  невыгружаемости
49
Атака  условия  взаимного  исключения
• Возможна	
  редко	
  — часто	
  программа	
  становится	
  
некорректной
• Идея	
  — убирать	
  ненужные	
  блокировки
- Делать	
  нужно	
  осторожно,	
  чтобы	
  функциональность	
  
не	
  страдала
- Заменять	
  на	
  другие	
  механизмы
50
Атака  условия  ожидания  и  удержания
• Запрашивать	
  ВСЕ	
  необходимые	
  ресурсы	
  не	
  в	
  
процессе	
  работы,	
  а	
  до	
  начала	
  работы.	
  
- Но	
  не	
  всегда	
  ресурсы	
  известны	
  заранее
• Вначале	
  временно	
  высвободить	
  все	
  удерживаемые	
  
ресурсы
51
Атака  условия  циклического  ожидания
52
Атака  условия  циклического  ожидания
• Нумерация	
  ресурсов!
- Захватывать	
  ресурсы	
  только	
  в	
  порядке	
  
возрастания	
  номеров
1
2 3
4
5
1
2
3
4
5
Demo	
  2.	
  Нумерация	
  ресурсов
54
Голодание    (Starvation)
• Голодание — ситуация,	
  в	
  которой	
  поток,	
  от	
  которого	
  
ожидается	
  прогресс,	
  (практически)	
  стоит	
  на	
  месте.
55
Голодание    (Starvation)
• Голодание — ситуация,	
  в	
  которой	
  поток,	
  от	
  которого	
  
ожидается	
  прогресс,	
  (практически)	
  стоит	
  на	
  месте.
• Заблуждение
- Голодание	
  может	
  осуществиться,	
  только	
  если	
  потоки	
  
с	
  более	
  высоким	
  приоритетом	
  постоянно	
  берут	
  
ресурсы,	
  которые	
  нужны	
  голодающему	
  потоку
56
Атака  условия  невыгружаемости
• Разрешить	
  выгружать!
57
Атака  условия  невыгружаемости
• Разрешить	
  выгружать!
• Что	
  есть	
  для	
  этого	
  в	
  Java?
58
Lock.tryLock
59
60
Что  же  делать
• Решение	
  с	
  посредником: официант	
  решает,	
  кому	
  
можно	
  брать	
  вилку,	
  а	
  кому	
  нет
- Решение	
  с	
  общим	
  критическим	
  ресурсом
- Решение	
  с	
  семафором
Demo	
  3.	
  Решения	
  с	
  официантом
62
И  все-­таки  бенчмарки…
5	
  потоков	
  по	
  2 секунды
eat think
Ordered	
  
Locks
Common	
  
Unfair	
  Lock
Common	
  Fair	
  
Lock Semaphore
0ms 0ms 25 000 000 55 000 000 450 000 11 000 000
0ms 1ms 7 900 7 700 7 500 4 000
1ms 0ms 1 600 1 500 1 500 1 700
1ms 1ms 3 100 1 500 1 500 2 700
Вопросы	
  и	
  ответы
Перерыв
Атомики,  CAS  и  неблокирующие  алгоритмы
66
67
Мотивация  бизнеса
68
Модели
• Модель	
  с	
  разделяемой	
  памятью
- Регистры
- Операции:	
  read,	
  write
- Удобно	
  программировать,	
  все	
  привыкли
• Модель	
  с	
  передачей	
  сообщений
- Послать	
  сообщение
- Похожа	
  на	
  то,	
  как	
  реально	
  работает	
  железо
69
Терминология
• Нет	
  устоявшейся	
  терминологии
• Термины:
• Parallel
- Concurrent
- Distributed
70
Виды  параллелизма
• На	
  уровне	
  операционной	
  системы
• На	
  уровне	
  одной	
  программы	
  /	
  процесса
71
Параллелизм  — ОС
- Слушать	
  музыку	
  и	
  переписываться
в	
  фейсбуке в	
  Одноклассниках
- При	
  зависании	
  одной	
  программы	
  другие	
  
продолжают	
  работать
- и	
  т.п.
72
Преимущества  параллелизма
• Использование	
  нескольких	
  ядер/процессоров
- Да	
  и	
  на	
  1	
  ядре	
  тоже!	
  (async I/O)
• Простота	
  моделирования
- Абстракция:	
  фреймворк забирает	
  сложность
• Упрощенная	
  обработка	
  асинхронных	
  событий
• Более	
  отзывчивые	
  интерфейсы	
  пользователя
- Event	
  Dispatch	
  Thread	
  (EDT),	
  async calls
73
Параллелизм  на  уровне  отдельно  взятой  программы
• Эффективное	
  использование	
  ресурсов
• Удобство,	
  простота	
  написания	
  кода
• Справедливость	
  
- Обработка	
  запросов	
  пользователей	
  на	
  серверах	
  
соцсети с	
  одинаковым	
  приоритетом
- Читатели	
  и	
  писатели
- Fairness	
  (честность)
74
Lock lock = new ReentrantLock(true);
75
Честность!
Lock lock = new ReentrantLock(true);
76
Честность!
Lock lock = new ReentrantLock(true);
77
Блокировки
• java.util.concurrent— since	
  Java	
  5
- Lock —> ReentrantLock
- ReadWriteLock —>
ReentrantReadWriteLock
- StampedLock — since Java 8
• Synchronized	
  method	
  /	
  section
• wait() / notify() / notifyAll()
78
Блокировки
• java.util.concurrent— since	
  Java	
  5
- Lock —> ReentrantLock
- ReadWriteLock —>
ReentrantReadWriteLock
- StampedLock — since Java 8
• Synchronized	
  method	
  /	
  section
• wait() / notify() / notifyAll()
Общее: ожидание
79
Проблемы  блокировок
• Взаимоблокировки	
  (Deadlocks)
• Инверсия	
  приоритетов
• Надежность	
  — вдруг	
  владелец	
  блокировки	
  помрет?
• Performance
- Параллелизма	
  в	
  критической	
  секции	
  нет!
- Владелец	
  блокировки	
  может	
  быть	
  вытеснен	
  
планировщиком
80
Закон  Амдала
• α — часть общего объема вычислений,
которую нельзя распараллелить
• 1-α — часть, которую можно
распараллелить
• p — количество потоков
81
Закон  Амдала
• α — часть общего объема вычислений,
которую нельзя распараллелить
• 1-α — часть, которую можно
распараллелить
• p — количество потоков
Неблокирующие	
  алгоритмы
83
Классификация
• Без	
  препятствий	
  (Obstruction-­‐Free)	
  — поток	
  совершает	
  
прогресс,	
  если	
  не	
  встречает	
  препятствий	
  со	
  стороны	
  
других	
  потоков
• Без	
  блокировок	
  (Lock-­‐Free) — гарантируется	
  системный	
  
прогресс	
  хотя	
  бы	
  одного	
  потока
• Без	
  ожидания (Wait-­‐Free) — каждая	
  операция	
  
выполняется	
  за	
  фиксированное	
  число	
  шагов,	
  не	
  
зависящее	
  от	
  других	
  потоков
84
Консенсус
• Объект	
  consensus	
  с	
  операцией	
  decide(v):
- consensus.decide(v)	
  ≠	
  const
- wait-­‐free
• N	
  Потоков	
  вызывают	
  consensus.decide()
- i-­‐ый поток	
  вызывает	
  consensus.decide(vi)
- Каждый	
  поток	
  вызывает	
  не	
  более	
  1	
  раза
- decide() возвращает	
  одно	
  из	
  vi
• decide()	
  — протокол	
  консенсуса
85
Консенсусное число
• Мощность	
  консенсуса	
  — максимальное	
  количество	
  
(N) потоков,	
  для	
  которых	
  данный	
  объект	
  
обеспечивает	
  консенсус
• Консенсусное число	
  примитива	
  синхронизации	
  —
максимальная	
  мощность	
  консенсуса,	
  который	
  можно	
  
построить	
  на	
  базе	
  данного	
  примитива и	
  некоторого	
  
количества	
  атомарных	
  регистров
- То	
  есть,	
  существует	
  реализация	
  метода	
  decide	
  для	
  
N	
  потоков,	
  использующая	
  данный	
  примитив	
  как	
  
строительный	
  блок
86
Консенсусные числа  различных  операций
• Операции	
  на	
  регистрах	
  — 1
• Read-­‐Modification-­‐Write	
  (RMW) — 2
- Common2	
  Class — коммутируют	
  друг	
  с	
  другом	
  или	
  
перезаписывают	
  друг	
  друга
- Универсальные	
  операции	
  — ∞
- Сравнение	
  с	
  обменом	
  (CAS):	
  
Compare-­‐And-­‐Swap,	
  Compare-­‐And-­‐Set
87
Compare  and  Swap
• Compare-and-swap (CAS)
- IA32, x64
- SPARC
• load-linked / store-conditional
(LL/SC)
- PowerPC
- ARM
88
Семантика  CAS
89
CAS  Loop  — типичный  паттерн  применения
1. Прочитать	
  значение	
  A	
  из	
  переменной	
  V
2. Взять	
  какое-­‐то	
  новое	
  значение	
  B	
  для	
  V
3. Использовать	
  CAS	
  для	
  атомарного	
  изменения	
  V	
  из	
  A	
  
в	
  B до	
  тех	
  пор,	
  пока	
  другие	
  потоки	
  меняют	
  значение	
  
V	
  во	
  время	
  этого	
  процесса
Атомарность Read-­‐Modify-­‐Write	
  реализуется	
  за	
  счет	
  
постоянного	
  мониторинга системы	
  на	
  предмет	
  
постороннего	
  вмешательства
90
Алгоритм  1:  неблокирующий  счетчик
91
Fast  vs.  slow  path
• Каждый	
  блок	
  кода	
  может	
  иметь,	
  как	
  минимум,	
  два	
  
пути	
  исполнения:	
  короткий	
  и	
  длинный
• Lock:	
  contended	
  vs.	
  Uncontended
• Uncontended	
  Lock:
- ≥	
  1	
  CAS
92
Недостатки  CAS
• CAS	
  заставляет	
  потоки,	
  которые	
  его	
  вызывают,	
  
работать	
  в	
  условиях	
  соревнования	
  (contention)
- Больше	
  contention	
  =	
  больше	
  бесполезных	
  циклов	
  
процессора,	
  трата	
  процессорного	
  времени
• Написание	
  корректных	
  и	
  быстрых	
  алгоритмов	
  на	
  	
  
CAS	
  требует	
  специальной	
  подготовки
Поддержка	
  в	
  Java
94
Поддержка  CAS  в  Java
• В	
  Java	
  5	
  появился	
  JSR166
- пакет	
  java.util.concurrent
- пакет	
  java.util.concurrent.atomic
• На	
  платформах,	
  поддерживающих	
  CAS,	
  JIT-­‐
компилятор	
  делает	
  inline	
  соответствующих	
  
машинных	
  инструкций
• Load	
  Linked	
  /	
  Store	
  Conditional	
  
95
Atomic  variable  classes
• Scalars
• Field	
  updaters
• Arrays
• Compound	
  variables
• Accumulators
- since	
  Java	
  8
96
Scalars
• AtomicBoolean
• AtomicInteger
• AtomicLong
• AtomicReference
97
AtomicInteger
• boolean compareAndSet(int expect, int update)
• int addAndGet(int delta)
• int getAndDecrement()
• int getAndIncrement()
• int incrementAndGet()
• …
98
AtomicInteger
• boolean compareAndSet(int expect, int update)
• int addAndGet(int delta)
• int getAndDecrement()
• int getAndIncrement()
• int incrementAndGet()
• …
Эти	
  операции	
  — блокирующие?
99
Multivariable  Invariant
100
Multivariable  Invariant
101
Field  Updaters
• AtomicIntegerFieldUpdater
- Reflection-­‐based	
  updater	
  for	
  volatile	
  int
• AtomicLongFieldUpdater
- Reflection-­‐based	
  updater	
  for	
  volatile	
  long
• AtomicReferenceFieldUpdater
- Reflection-­‐based	
  updater	
  for	
  volatile	
  object
102
AtomicLongFieldUpdater
- long	
  addAndGet(T	
  obj,	
  long	
  delta)
- boolean compareAndSet(T	
  obj,	
  long	
  expect,	
   long	
  
update)
- long	
  getAndAdd(T	
  obj,	
  long	
  delta)
- long	
  incrementAndGet(T	
  obj)
103
AtomicLongFieldUpdater
104
AtomicLongFieldUpdater
105
AtomicArrays
• AtomicIntegerArray
• AtomicLongArray
• AtomicReferenceArray
106
AtomicLongArray
• long addAndGet(int i, long delta)
• long getAndAdd(int i, long delta)
• boolean compareAndSet(int i, long
expect, long update)
• long incrementAndGet(int i)
• …
107
Compound  Variables
• AtomicMarkableReference
- compareAndSet(
V expectedReference, V newReference,
boolean expectedMark, boolean newMark)
• AtomicStampedReference
- boolean compareAndSet(
V expectedReference, V newReference,
int expectedStamp, int newStamp)
108
Accumulators
• DoubleAccumulator
• DoubleAdder
• LongAccumulator
• LongAdder
• (Striped64)
109
LongAccumulator
• void accumulate(long x)
• long get()
• long getThenReset()
• Void reset()
110
• Алгоритм	
  называется	
  неблокирующим	
  (nonblocking),	
  если	
  
отказ	
  или	
  остановка	
  любого	
  потока	
  не	
  может	
  привести	
  к	
  
отказу	
  или	
  остановке	
  любого	
  другого	
  потока
• Алгоритм	
  называется	
  свободным	
  от	
  блокировок(lock-­‐free),	
  
если	
  на	
  каждом	
  шаге	
  какой-­‐то	
  поток	
  выполняет	
  работу	
  
(make	
  progress)
• nonblocking и	
  lock-­‐free	
  — это	
  разные	
  вещи!
- Алгоритмы	
  на	
  CAS	
  могут быть	
  одновременно	
  
неблокирующими	
  и	
  свободными	
  от	
  блокировок	
  
110
Неблокирующие  алгоритмы
111
Неблокирующий  стек
112
Неблокирующий  стек
113
Неблокирующий  стек
114
Неблокирующая  очередь
• Michael	
  and	
  Scott,	
  1996
• Потоки	
  помогают друг	
  другу
Литература
116
117
118
119
DL  и  все-­все-­все
http://altair.cs.oswego.edu/mailman/listinfo/concurrency-­‐interest
To	
  post	
  a	
  message	
  to	
  all	
  the	
  list	
  members,	
  send	
  email to
concurrency-­‐interest@cs.oswego.edu
120
Много	
  полезных	
  видео
121
https://bitbucket.org/23derevo/concurrency
Вопросы	
  и	
  ответы
Спасибо	
  за	
  внимание!
@23derevo
alexey@jugru.org
alexey.fyodorov@corp.mail.ru

Mais conteúdo relacionado

Mais procurados

CodeFest 2014. Макаров Н. — Selenium Grid. OK Version
CodeFest 2014. Макаров Н. — Selenium Grid. OK VersionCodeFest 2014. Макаров Н. — Selenium Grid. OK Version
CodeFest 2014. Макаров Н. — Selenium Grid. OK VersionCodeFest
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.Igor Shkulipa
 
Aлександр Зайцев, LifeStreet
Aлександр Зайцев, LifeStreetAлександр Зайцев, LifeStreet
Aлександр Зайцев, LifeStreetOntico
 
Путеводитель SQLite для разработчика
Путеводитель SQLite для разработчикаПутеводитель SQLite для разработчика
Путеводитель SQLite для разработчикаiThink
 
Системы контроля версий
Системы контроля версийСистемы контроля версий
Системы контроля версийUnguryan Vitaliy
 
Подход доктора Хауса в тестировании оптимизации запросов (5 серия)
Подход доктора Хауса в тестировании оптимизации запросов (5 серия)Подход доктора Хауса в тестировании оптимизации запросов (5 серия)
Подход доктора Хауса в тестировании оптимизации запросов (5 серия)SQALab
 
Date & Time in Java SE 8
Date & Time in Java SE 8Date & Time in Java SE 8
Date & Time in Java SE 8Ilya Lapitan
 
8. java lecture threads
8. java lecture threads8. java lecture threads
8. java lecture threadsMERA_school
 
Кванториум: софт скиллз
Кванториум: софт скиллзКванториум: софт скиллз
Кванториум: софт скиллзNikolay Skirda
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.Igor Shkulipa
 
XP практики в проектах с тяжелой наследственностью
XP практики в проектах с тяжелой наследственностьюXP практики в проектах с тяжелой наследственностью
XP практики в проектах с тяжелой наследственностьюAlex Tumanoff
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.Igor Shkulipa
 
My Top Scrum WTF. Pecha Kucha
My Top Scrum WTF. Pecha KuchaMy Top Scrum WTF. Pecha Kucha
My Top Scrum WTF. Pecha KuchaAlexey Krivitsky
 
10. java lecture generics&collections
10. java lecture generics&collections10. java lecture generics&collections
10. java lecture generics&collectionsMERA_school
 
Модульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETМодульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETDev2Dev
 
Сергей Париев - "обработка дедлоков в MySql"
Сергей Париев - "обработка дедлоков в MySql"Сергей Париев - "обработка дедлоков в MySql"
Сергей Париев - "обработка дедлоков в MySql"railsclub
 
Javascript testing
Javascript testingJavascript testing
Javascript testingTCS bank
 
C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.Igor Shkulipa
 

Mais procurados (20)

CodeFest 2014. Макаров Н. — Selenium Grid. OK Version
CodeFest 2014. Макаров Н. — Selenium Grid. OK VersionCodeFest 2014. Макаров Н. — Selenium Grid. OK Version
CodeFest 2014. Макаров Н. — Selenium Grid. OK Version
 
C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.C++ STL & Qt. Занятие 08.
C++ STL & Qt. Занятие 08.
 
Aлександр Зайцев, LifeStreet
Aлександр Зайцев, LifeStreetAлександр Зайцев, LifeStreet
Aлександр Зайцев, LifeStreet
 
Путеводитель SQLite для разработчика
Путеводитель SQLite для разработчикаПутеводитель SQLite для разработчика
Путеводитель SQLite для разработчика
 
Системы контроля версий
Системы контроля версийСистемы контроля версий
Системы контроля версий
 
Bytecode
BytecodeBytecode
Bytecode
 
Подход доктора Хауса в тестировании оптимизации запросов (5 серия)
Подход доктора Хауса в тестировании оптимизации запросов (5 серия)Подход доктора Хауса в тестировании оптимизации запросов (5 серия)
Подход доктора Хауса в тестировании оптимизации запросов (5 серия)
 
Date & Time in Java SE 8
Date & Time in Java SE 8Date & Time in Java SE 8
Date & Time in Java SE 8
 
8. java lecture threads
8. java lecture threads8. java lecture threads
8. java lecture threads
 
Кванториум: софт скиллз
Кванториум: софт скиллзКванториум: софт скиллз
Кванториум: софт скиллз
 
C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.C++ STL & Qt. Занятие 11.
C++ STL & Qt. Занятие 11.
 
XP практики в проектах с тяжелой наследственностью
XP практики в проектах с тяжелой наследственностьюXP практики в проектах с тяжелой наследственностью
XP практики в проектах с тяжелой наследственностью
 
C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.C++ STL & Qt. Занятие 10.
C++ STL & Qt. Занятие 10.
 
My Top Scrum WTF. Pecha Kucha
My Top Scrum WTF. Pecha KuchaMy Top Scrum WTF. Pecha Kucha
My Top Scrum WTF. Pecha Kucha
 
10. java lecture generics&collections
10. java lecture generics&collections10. java lecture generics&collections
10. java lecture generics&collections
 
JRebel
JRebelJRebel
JRebel
 
Модульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NETМодульная структура. Цветцих Денис D2D Just.NET
Модульная структура. Цветцих Денис D2D Just.NET
 
Сергей Париев - "обработка дедлоков в MySql"
Сергей Париев - "обработка дедлоков в MySql"Сергей Париев - "обработка дедлоков в MySql"
Сергей Париев - "обработка дедлоков в MySql"
 
Javascript testing
Javascript testingJavascript testing
Javascript testing
 
C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.C++ STL & Qt. Занятие 04.
C++ STL & Qt. Занятие 04.
 

Destaque

JLL Columbus Office Outlook: Q3 2016
JLL Columbus Office Outlook: Q3 2016JLL Columbus Office Outlook: Q3 2016
JLL Columbus Office Outlook: Q3 2016Peter McStravick
 
Amortized complexity
Amortized complexityAmortized complexity
Amortized complexityparamita30
 
Spieler Press Release_al_2_3_16
Spieler Press Release_al_2_3_16Spieler Press Release_al_2_3_16
Spieler Press Release_al_2_3_16Geri Spieler
 
Issue 7 NTEU Chapter_164_newsletter
Issue 7 NTEU Chapter_164_newsletterIssue 7 NTEU Chapter_164_newsletter
Issue 7 NTEU Chapter_164_newsletterNTEU Chapter 164
 
Agricultural investment briefing
Agricultural investment briefingAgricultural investment briefing
Agricultural investment briefingTony Palanca
 
Moving to g1 gc by Kirk Pepperdine.
Moving to g1 gc by Kirk Pepperdine.Moving to g1 gc by Kirk Pepperdine.
Moving to g1 gc by Kirk Pepperdine.J On The Beach
 
Doing math with python.ch04
Doing math with python.ch04Doing math with python.ch04
Doing math with python.ch04Seok-joon Yun
 
Versiooniuuenduse automatiseerimine kasutades skriptimiskeelt Bash
Versiooniuuenduse automatiseerimine kasutades skriptimiskeelt BashVersiooniuuenduse automatiseerimine kasutades skriptimiskeelt Bash
Versiooniuuenduse automatiseerimine kasutades skriptimiskeelt BashIrina Ivanova
 
Certificado de participação no Hackathon Globo 2016 - Cesar A. Nogueira
Certificado de participação no Hackathon Globo 2016 - Cesar A. NogueiraCertificado de participação no Hackathon Globo 2016 - Cesar A. Nogueira
Certificado de participação no Hackathon Globo 2016 - Cesar A. NogueiraCesar Augusto Nogueira
 
Hadoop HDFS Detailed Introduction
Hadoop HDFS Detailed IntroductionHadoop HDFS Detailed Introduction
Hadoop HDFS Detailed IntroductionHanborq Inc.
 
Project Performance Dashboard
Project Performance DashboardProject Performance Dashboard
Project Performance DashboardChris Vizzuett
 
Personal Mission and Vision Statements
Personal Mission and Vision StatementsPersonal Mission and Vision Statements
Personal Mission and Vision StatementsAurelien Domont, MBA
 

Destaque (13)

JLL Columbus Office Outlook: Q3 2016
JLL Columbus Office Outlook: Q3 2016JLL Columbus Office Outlook: Q3 2016
JLL Columbus Office Outlook: Q3 2016
 
Amortized complexity
Amortized complexityAmortized complexity
Amortized complexity
 
Spieler Press Release_al_2_3_16
Spieler Press Release_al_2_3_16Spieler Press Release_al_2_3_16
Spieler Press Release_al_2_3_16
 
Issue 7 NTEU Chapter_164_newsletter
Issue 7 NTEU Chapter_164_newsletterIssue 7 NTEU Chapter_164_newsletter
Issue 7 NTEU Chapter_164_newsletter
 
Agricultural investment briefing
Agricultural investment briefingAgricultural investment briefing
Agricultural investment briefing
 
Moving to g1 gc by Kirk Pepperdine.
Moving to g1 gc by Kirk Pepperdine.Moving to g1 gc by Kirk Pepperdine.
Moving to g1 gc by Kirk Pepperdine.
 
Doing math with python.ch04
Doing math with python.ch04Doing math with python.ch04
Doing math with python.ch04
 
Versiooniuuenduse automatiseerimine kasutades skriptimiskeelt Bash
Versiooniuuenduse automatiseerimine kasutades skriptimiskeelt BashVersiooniuuenduse automatiseerimine kasutades skriptimiskeelt Bash
Versiooniuuenduse automatiseerimine kasutades skriptimiskeelt Bash
 
Certificado de participação no Hackathon Globo 2016 - Cesar A. Nogueira
Certificado de participação no Hackathon Globo 2016 - Cesar A. NogueiraCertificado de participação no Hackathon Globo 2016 - Cesar A. Nogueira
Certificado de participação no Hackathon Globo 2016 - Cesar A. Nogueira
 
Waldorf Education
Waldorf Education Waldorf Education
Waldorf Education
 
Hadoop HDFS Detailed Introduction
Hadoop HDFS Detailed IntroductionHadoop HDFS Detailed Introduction
Hadoop HDFS Detailed Introduction
 
Project Performance Dashboard
Project Performance DashboardProject Performance Dashboard
Project Performance Dashboard
 
Personal Mission and Vision Statements
Personal Mission and Vision StatementsPersonal Mission and Vision Statements
Personal Mission and Vision Statements
 

Semelhante a Общество Мертвых Потоков

Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ontico
 
Практика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-серверПрактика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-серверPlatonov Sergey
 
Внутреннее устройство GC
Внутреннее устройство GCВнутреннее устройство GC
Внутреннее устройство GCtym32167
 
Java Ahead-Of-Time compilation
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilationNikita Lipsky
 
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере ResharperCodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере ResharperCodeFest
 
20100228 virtualization igotti_lecture03
20100228 virtualization igotti_lecture0320100228 virtualization igotti_lecture03
20100228 virtualization igotti_lecture03Computer Science Club
 
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»SpbDotNet Community
 
Проектирование программных систем. Занятие 6
Проектирование программных систем. Занятие 6Проектирование программных систем. Занятие 6
Проектирование программных систем. Занятие 6Dima Dzuba
 
Управление ресурсами в Linux и OpenVZ
Управление ресурсами в Linux и OpenVZ Управление ресурсами в Linux и OpenVZ
Управление ресурсами в Linux и OpenVZ OpenVZ
 
Alexey Alexeev - Critical chain
Alexey Alexeev - Critical chainAlexey Alexeev - Critical chain
Alexey Alexeev - Critical chainAgileLAB
 
Роман Еникеев - PHP обязан умирать
Роман Еникеев - PHP обязан умиратьРоман Еникеев - PHP обязан умирать
Роман Еникеев - PHP обязан умиратьDataArt
 
Операционные системы 2015, лекция № 5
Операционные системы 2015, лекция № 5Операционные системы 2015, лекция № 5
Операционные системы 2015, лекция № 5Aleksey Bragin
 
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp VaultКак перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp VaultOleg Mykolaichenko
 
Caching data outside Java Heap and using Shared Memory in Java
Caching data outside Java Heap and using Shared Memory in JavaCaching data outside Java Heap and using Shared Memory in Java
Caching data outside Java Heap and using Shared Memory in JavaAndrei Pangin
 
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02Computer Science Club
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013Alex Chistyakov
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Serguei Gitinsky
 
Ольга Лужецька - Exploratory testing: Love it or Leave it?
Ольга Лужецька - Exploratory testing: Love it or Leave it?Ольга Лужецька - Exploratory testing: Love it or Leave it?
Ольга Лужецька - Exploratory testing: Love it or Leave it?DataArt
 

Semelhante a Общество Мертвых Потоков (19)

Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
Ангелы и демоны многопоточного программирования / Алексей Федоров (Одноклассн...
 
Практика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-серверПрактика Lock-free. RealTime-сервер
Практика Lock-free. RealTime-сервер
 
Внутреннее устройство GC
Внутреннее устройство GCВнутреннее устройство GC
Внутреннее устройство GC
 
Java Ahead-Of-Time compilation
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilation
 
An internal look at HotSpot JVM
An internal look at HotSpot JVMAn internal look at HotSpot JVM
An internal look at HotSpot JVM
 
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере ResharperCodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
CodeFest 2013. Скрыган К. — Оптимизация .Net приложений на примере Resharper
 
20100228 virtualization igotti_lecture03
20100228 virtualization igotti_lecture0320100228 virtualization igotti_lecture03
20100228 virtualization igotti_lecture03
 
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
Егор Гришечко «У вас найдётся минутка, чтобы поговорить о блокчейне?»
 
Проектирование программных систем. Занятие 6
Проектирование программных систем. Занятие 6Проектирование программных систем. Занятие 6
Проектирование программных систем. Занятие 6
 
Управление ресурсами в Linux и OpenVZ
Управление ресурсами в Linux и OpenVZ Управление ресурсами в Linux и OpenVZ
Управление ресурсами в Linux и OpenVZ
 
Alexey Alexeev - Critical chain
Alexey Alexeev - Critical chainAlexey Alexeev - Critical chain
Alexey Alexeev - Critical chain
 
Роман Еникеев - PHP обязан умирать
Роман Еникеев - PHP обязан умиратьРоман Еникеев - PHP обязан умирать
Роман Еникеев - PHP обязан умирать
 
Операционные системы 2015, лекция № 5
Операционные системы 2015, лекция № 5Операционные системы 2015, лекция № 5
Операционные системы 2015, лекция № 5
 
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp VaultКак перестать хранить секреты в git и начать использовать Hashicorp Vault
Как перестать хранить секреты в git и начать использовать Hashicorp Vault
 
Caching data outside Java Heap and using Shared Memory in Java
Caching data outside Java Heap and using Shared Memory in JavaCaching data outside Java Heap and using Shared Memory in Java
Caching data outside Java Heap and using Shared Memory in Java
 
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
Н. Иготти. Виртуализация и виртуальные машины. Лекция 02
 
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013SmartOS/Solaris app tuning tools/technologies on HL++ 2013
SmartOS/Solaris app tuning tools/technologies on HL++ 2013
 
Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013Git in Sky presentation @ HighLoad++ 2013
Git in Sky presentation @ HighLoad++ 2013
 
Ольга Лужецька - Exploratory testing: Love it or Leave it?
Ольга Лужецька - Exploratory testing: Love it or Leave it?Ольга Лужецька - Exploratory testing: Love it or Leave it?
Ольга Лужецька - Exploratory testing: Love it or Leave it?
 

Mais de Alexey Fyodorov

Non-blocking Michael-Scott queue algorithm
Non-blocking Michael-Scott queue algorithmNon-blocking Michael-Scott queue algorithm
Non-blocking Michael-Scott queue algorithmAlexey Fyodorov
 
How threads help each other
How threads help each otherHow threads help each other
How threads help each otherAlexey Fyodorov
 
Помоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другуПомоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другуAlexey Fyodorov
 
Counter Wars (JEEConf 2016)
Counter Wars (JEEConf 2016)Counter Wars (JEEConf 2016)
Counter Wars (JEEConf 2016)Alexey Fyodorov
 
Non-blocking synchronization — what is it and why we (don't?) need it
Non-blocking synchronization — what is it and why we (don't?) need itNon-blocking synchronization — what is it and why we (don't?) need it
Non-blocking synchronization — what is it and why we (don't?) need itAlexey Fyodorov
 
Синхронизация без блокировок и СМС
Синхронизация без блокировок и СМССинхронизация без блокировок и СМС
Синхронизация без блокировок и СМСAlexey Fyodorov
 
Unsafe: to be or to be removed?
Unsafe: to be or to be removed?Unsafe: to be or to be removed?
Unsafe: to be or to be removed?Alexey Fyodorov
 
JDK: CPU, PSU, LU, FR — WTF?!
JDK: CPU, PSU, LU, FR — WTF?!JDK: CPU, PSU, LU, FR — WTF?!
JDK: CPU, PSU, LU, FR — WTF?!Alexey Fyodorov
 
Atomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithmsAtomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithmsAlexey Fyodorov
 
Java Platform Tradeoffs (Riga 2013)
Java Platform Tradeoffs (Riga 2013)Java Platform Tradeoffs (Riga 2013)
Java Platform Tradeoffs (Riga 2013)Alexey Fyodorov
 
Java Platform Tradeoffs (CEE SECR 2013)
Java Platform Tradeoffs (CEE SECR 2013)Java Platform Tradeoffs (CEE SECR 2013)
Java Platform Tradeoffs (CEE SECR 2013)Alexey Fyodorov
 
Процесс изменения платформы Java
Процесс изменения платформы JavaПроцесс изменения платформы Java
Процесс изменения платформы JavaAlexey Fyodorov
 
Java: how to thrive in the changing world
Java: how to thrive in the changing worldJava: how to thrive in the changing world
Java: how to thrive in the changing worldAlexey Fyodorov
 

Mais de Alexey Fyodorov (14)

Non-blocking Michael-Scott queue algorithm
Non-blocking Michael-Scott queue algorithmNon-blocking Michael-Scott queue algorithm
Non-blocking Michael-Scott queue algorithm
 
How threads help each other
How threads help each otherHow threads help each other
How threads help each other
 
Помоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другуПомоги ближнему, или Как потоки помогают друг другу
Помоги ближнему, или Как потоки помогают друг другу
 
Counter Wars (JEEConf 2016)
Counter Wars (JEEConf 2016)Counter Wars (JEEConf 2016)
Counter Wars (JEEConf 2016)
 
Non-blocking synchronization — what is it and why we (don't?) need it
Non-blocking synchronization — what is it and why we (don't?) need itNon-blocking synchronization — what is it and why we (don't?) need it
Non-blocking synchronization — what is it and why we (don't?) need it
 
Синхронизация без блокировок и СМС
Синхронизация без блокировок и СМССинхронизация без блокировок и СМС
Синхронизация без блокировок и СМС
 
Unsafe: to be or to be removed?
Unsafe: to be or to be removed?Unsafe: to be or to be removed?
Unsafe: to be or to be removed?
 
JDK: CPU, PSU, LU, FR — WTF?!
JDK: CPU, PSU, LU, FR — WTF?!JDK: CPU, PSU, LU, FR — WTF?!
JDK: CPU, PSU, LU, FR — WTF?!
 
Atomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithmsAtomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithms
 
Java in Motion
Java in MotionJava in Motion
Java in Motion
 
Java Platform Tradeoffs (Riga 2013)
Java Platform Tradeoffs (Riga 2013)Java Platform Tradeoffs (Riga 2013)
Java Platform Tradeoffs (Riga 2013)
 
Java Platform Tradeoffs (CEE SECR 2013)
Java Platform Tradeoffs (CEE SECR 2013)Java Platform Tradeoffs (CEE SECR 2013)
Java Platform Tradeoffs (CEE SECR 2013)
 
Процесс изменения платформы Java
Процесс изменения платформы JavaПроцесс изменения платформы Java
Процесс изменения платформы Java
 
Java: how to thrive in the changing world
Java: how to thrive in the changing worldJava: how to thrive in the changing world
Java: how to thrive in the changing world
 

Общество Мертвых Потоков