Синхронизация без блокировок и СМС
-
Upload
alexey-fyodorov -
Category
Engineering
-
view
1.245 -
download
2
Transcript of Синхронизация без блокировок и СМС
![Page 1: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/1.jpg)
Алексей Федоров, Одноклассники / JUG.ru
Синхронизация без блокировок и СМС
@ #devclub
![Page 2: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/2.jpg)
Кто вы?
![Page 3: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/3.jpg)
Зачем вы здесь?
![Page 4: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/4.jpg)
4
![Page 5: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/5.jpg)
5
Модели
• Модельсразделяемойпамятью- Регистры-Операции:read,write
- Удобнопрограммировать,всепривыкли• Модельспередачейсообщений- Послатьсообщение- Похожанато,какреальноработаетжелезо
![Page 6: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/6.jpg)
6
Терминология
• Нетустоявшейсятерминологии• Термины:• Parallel- Concurrent- Distributed
![Page 7: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/7.jpg)
7
Виды параллелизма
• Науровнеоперационнойсистемы• Науровнеоднойпрограммы/процесса
![Page 8: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/8.jpg)
8
Параллелизм — ОС
• СлушатьмузыкуипереписыватьсявфейсбукевОдноклассниках
• Призависанииоднойпрограммыдругиепродолжаютработать
• ит.п.
![Page 9: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/9.jpg)
9
Преимущества параллелизма
• Использованиенесколькихядер/процессоров- Даина1ядретоже!(async I/O)
• Простотамоделирования- Абстракция:фреймворк забираетсложность
![Page 10: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/10.jpg)
10
Преимущества параллелизма
• Использованиенесколькихядер/процессоров- Даина1ядретоже!(async I/O)
• Простотамоделирования- Абстракция:фреймворк забираетсложность
• Упрощеннаяобработкаасинхронныхсобытий• Болееотзывчивыеинтерфейсыпользователя- EventDispatchThread(EDT),async calls
![Page 11: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/11.jpg)
11 Параллелизм на уровне отдельно взятой программы
• Эффективноеиспользованиересурсов• Удобство,простотанаписаниякода• Справедливость- Обработказапросовпользователейнасерверахсоциальнойсетисодинаковымприоритетом
- Читателииписатели- Fairness(честность)
![Page 12: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/12.jpg)
12
Lock lock = new ReentrantLock(true);
![Page 13: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/13.jpg)
13
Честность!
Lock lock = new ReentrantLock(true);
![Page 14: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/14.jpg)
14
Блокировки
• java.util.concurrent — since Java 5- Lock —> ReentrantLock- ReadWriteLock —> ReentrantReadWriteLock- StampedLock — since Java 8
• Synchronized method / section• wait() / notify() / notifyAll()
![Page 15: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/15.jpg)
15
Блокировки
• java.util.concurrent — since Java 5- Lock —> ReentrantLock- ReadWriteLock —> ReentrantReadWriteLock- StampedLock — since Java 8
• Synchronized method / section• wait() / notify() / notifyAll()
Общее: ожидание
![Page 16: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/16.jpg)
16
Проблемы блокировок
• Взаимоблокировки(Deadlocks)• Инверсияприоритетов• Надежность— вдругвладелецблокировкипомрет?
• Performance- Параллелизмавкритическойсекциинет!- Владелецблокировкиможетбытьвытесненпланировщиком
![Page 17: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/17.jpg)
17
Закон Амдала
• α — частьобщегообъемавычислений,которуюнельзяраспараллелить
• 1-α — часть,которуюможнораспараллелить
• p — количествопотоков
![Page 18: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/18.jpg)
18
Закон Амдала
• α — частьобщегообъемавычислений,которуюнельзяраспараллелить
• 1-α — часть,которуюможнораспараллелить
• p — количествопотоков
![Page 19: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/19.jpg)
Неблокирующие алгоритмы
![Page 20: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/20.jpg)
20
Классификация
• Безпрепятствий(Obstruction-Free)— потоксовершаетпрогресс,еслиневстречаетпрепятствийсостороныдругихпотоков
![Page 21: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/21.jpg)
21
Классификация
• Безпрепятствий(Obstruction-Free)— потоксовершаетпрогресс,еслиневстречаетпрепятствийсостороныдругихпотоков
• Безблокировок(Lock-Free)— гарантируетсясистемныйпрогрессхотябыодногопотока
![Page 22: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/22.jpg)
22
Классификация
• Безпрепятствий(Obstruction-Free)— потоксовершаетпрогресс,еслиневстречаетпрепятствийсостороныдругихпотоков
• Безблокировок(Lock-Free)— гарантируетсясистемныйпрогрессхотябыодногопотока
• Безожидания (Wait-Free)— каждаяоперациявыполняетсязафиксированноечислошагов,независящееотдругихпотоков
![Page 23: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/23.jpg)
23
Сравнительная мощность примитивов
Консенсусные числа различных операций• Операциинарегистрах— 1• Read-Modification-Write(RMW) — 2- Common2Class — коммутируютдругсдругомилиперезаписываютдругдруга
• Универсальныеоперации—∞- Сравнениесобменом(CAS)- Compare-And-Swap,Compare-And-Set
![Page 24: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/24.jpg)
24
Compare and Swap
• Compare-and-swap (CAS)- IA32, x64 - SPARC
• load-linked / store-conditional (LL/SC)- PowerPC- ARM
![Page 25: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/25.jpg)
25Семантика CAS
![Page 26: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/26.jpg)
26
CAS Loop — типичный паттерн применения
1. ПрочитатьзначениеAизпеременнойV2. Взятькакое-тоновоезначениеBдляV3. ИспользоватьCASдляатомарногоизмененияV
изAвB дотехпор,покадругиепотокименяютзначениеVвовремяэтогопроцесса
![Page 27: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/27.jpg)
27
CAS Loop — типичный паттерн применения
1. ПрочитатьзначениеAизпеременнойV2. Взятькакое-тоновоезначениеBдляV3. ИспользоватьCASдляатомарногоизмененияV
изAвB дотехпор,покадругиепотокименяютзначениеVвовремяэтогопроцесса
Атомарность Read-Modify-Writeреализуетсязасчетпостоянногомониторинга системынапредметпостороннеговмешательства
![Page 28: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/28.jpg)
28Пример: неблокирующий счетчик
![Page 29: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/29.jpg)
29
Fast vs. slow path
• Каждыйблоккодаможетиметь,какминимум,двапутиисполнения:короткийидлинный
• Lock:contendedvs.Uncontended
• UncontendedLock:- ≥1CAS
![Page 30: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/30.jpg)
30Недостатки CAS
• CASзаставляетпотоки,которыееговызывают,работатьвусловияхсоревнования(contention)- Большеcontention=большебесполезныхцикловпроцессора,тратапроцессорноговремени
• НаписаниекорректныхибыстрыхалгоритмовнаCASтребуетспециальнойподготовки
![Page 31: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/31.jpg)
Поддержка в Java
![Page 32: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/32.jpg)
32
Поддержка CAS в Java
• ВJava5появилсяJSR166- пакетjava.util.concurrent- пакетjava.util.concurrent.atomic
• Наплатформах,поддерживающихCAS,JIT-компиляторделаетinlineсоответствующихмашинныхинструкций
• LoadLinked/StoreConditional
![Page 33: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/33.jpg)
33
Atomic variable classes
• Scalars• Field updaters• Arrays• Compound variables• Accumulators- since Java 8
![Page 34: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/34.jpg)
34
Scalars
• AtomicBoolean• AtomicInteger• AtomicLong• AtomicReference
![Page 35: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/35.jpg)
35
AtomicLong
• boolean compareAndSet(int expect, intupdate)
• long addAndGet(int delta)• long getAndAdd(int delta)• long getAndDecrement()• long getAndIncrement()• long incrementAndGet()• …
![Page 36: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/36.jpg)
36
AtomicLong
• boolean compareAndSet(int expect, intupdate)
• long addAndGet(int delta)• long getAndAdd(int delta)• long getAndDecrement()• long getAndIncrement()• long incrementAndGet()• …
![Page 37: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/37.jpg)
37
atomicInteger.getAndAdd(5) — Thanks, @AndreiPangin
JDK 7u80 JDK 8u66
83
46
15 11
132105
45 43
020406080
100120140
1 2 3 4
ops
/ μs
threads
![Page 38: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/38.jpg)
38 JDK 7u80 — atomicLong.getAndAdd(5)
![Page 39: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/39.jpg)
39 JDK 8u66 — atomicLong.getAndAdd(5)
![Page 40: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/40.jpg)
ХардкорЪ
![Page 41: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/41.jpg)
41
atomicLong.getAndAdd(5)
loop:mov 0x10(%rbx),%raxmov %rax,%r11add $0x5,%r11lock cmpxchg %r11,0x10(%rbx)sete %r11bmovzbl %r11b,%r11dtest %r10d,%r10dje loop
JDK 7u80 -XX:+PrintAssembly
![Page 42: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/42.jpg)
42
atomicLong.getAndAdd(5)
lock addq $0x5, 0x10(%rbp)loop:mov 0x10(%rbx),%raxmov %rax,%r11add $0x5,%r11lock cmpxchg %r11,0x10(%rbx)sete %r11bmovzbl %r11b,%r11dtest %r10d,%r10dje loop
JDK 7u80 -XX:+PrintAssembly JDK 8u60
![Page 43: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/43.jpg)
43
atomicLong.getAndAdd(5)
lock addq $0x5, 0x10(%rbp)loop:mov 0x10(%rbx),%raxmov %rax,%r11add $0x5,%r11lock cmpxchg %r11,0x10(%rbx)sete %r11bmovzbl %r11b,%r11dtest %r10d,%r10dje loop
JDK 7u80 -XX:+PrintAssembly JDK 8u60
83
4615 11
132105
45 43
1 2 3 4
ops
/ μs
threads
![Page 44: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/44.jpg)
44Multivariable Invariant
![Page 45: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/45.jpg)
45Multivariable Invariant
![Page 46: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/46.jpg)
46
Field Updaters
• AtomicIntegerFieldUpdater- Reflection-basedupdaterforvolatileint
• AtomicLongFieldUpdater- Reflection-basedupdaterforvolatilelong
• AtomicReferenceFieldUpdater
- Reflection-basedupdaterforvolatileobject
![Page 47: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/47.jpg)
47
AtomicLongFieldUpdater
long addAndGet(T obj, long delta)
boolean compareAndSet(T obj, long exp, long upd)
long getAndAdd(T obj, long delta)
long incrementAndGet(T obj)
![Page 48: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/48.jpg)
Demo. Legacy Volatile Counter
![Page 49: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/49.jpg)
49 AtomicLongFieldUpdater
![Page 50: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/50.jpg)
50 AtomicLongFieldUpdater
![Page 51: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/51.jpg)
51
AtomicArrays
• AtomicIntegerArray
• AtomicLongArray
• AtomicReferenceArray
![Page 52: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/52.jpg)
52
AtomicLongArray
• long addAndGet(int i, long delta)
• long getAndAdd(int i, long delta)
• boolean compareAndSet(int i, long exp, long upd)
• long incrementAndGet(int i)
• …
![Page 53: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/53.jpg)
53Compound Variables
AtomicMarkableReferenceV compareAndSet(
V expectedReference, V newReference, boolean expectedMark, boolean newMark)
AtomicStampedReferenceboolean compareAndSet(
V expectedReference, V newReference, int expectedStamp, int newStamp)
![Page 54: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/54.jpg)
54
Accumulators
• DoubleAccumulator• DoubleAdder• LongAccumulator• LongAdder• (Striped64)
![Page 55: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/55.jpg)
55
LongAccumulator
• void accumulate(long x)
• long get()
• long getThenReset()
• Void reset()
![Page 56: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/56.jpg)
56
Неблокирующие алгоритмы
• Алгоритмназываетсянеблокирующим(nonblocking),еслиотказилиостановкалюбогопотоканеможетпривестикотказуилиостановкелюбогодругогопотока
56
![Page 57: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/57.jpg)
57
Неблокирующие алгоритмы
• Алгоритмназываетсянеблокирующим(nonblocking),еслиотказилиостановкалюбогопотоканеможетпривестикотказуилиостановкелюбогодругогопотока
• Алгоритмназываетсясвободнымотблокировок(lock-free),еслинакаждомшагекакой-топотоквыполняетработу(makeprogress)
57
![Page 58: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/58.jpg)
58
Неблокирующие алгоритмы
• Алгоритмназываетсянеблокирующим(nonblocking),еслиотказилиостановкалюбогопотоканеможетпривестикотказуилиостановкелюбогодругогопотока
• Алгоритмназываетсясвободнымотблокировок(lock-free),еслинакаждомшагекакой-топотоквыполняетработу(makeprogress)
58
nonblocking иlock-free— эторазныевещи!- АлгоритмынаCASмогут бытьодновременнонеблокирующимиисвободнымиотблокировок
![Page 59: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/59.jpg)
59
Неблокирующие структуры данных
• Стек• Очереди-Многоразныхалгоритмов-MichaelandScott,1996- Потокипомогают другдругу
![Page 60: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/60.jpg)
Литература
![Page 61: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/61.jpg)
61
![Page 62: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/62.jpg)
62
![Page 63: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/63.jpg)
63
![Page 64: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/64.jpg)
64
DL и все-все-все
http://altair.cs.oswego.edu/mailman/listinfo/concurrency-interest
To post a message to all the list members, send email [email protected]
![Page 65: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/65.jpg)
65
Много полезных видео
![Page 66: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/66.jpg)
66
https://bitbucket.org/23derevo/concurrency
![Page 67: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/67.jpg)
Вопросы и ответы
![Page 68: Синхронизация без блокировок и СМС](https://reader033.fdocuments.net/reader033/viewer/2022042604/587ac39e1a28abc0478b75b3/html5/thumbnails/68.jpg)
68
Development @ Odnoklassniki
•Blog-http://habrahabr.ru/company/odnoklassniki
•Open source-https://github.com/odnoklassniki
•Career-http://v.ok.ru