SlideShare a Scribd company logo
1 of 86
Download to read offline
Алексей	Федоров,	
Одноклассники
Синхронизация без блокировок и СМС
Зачем вы здесь?
3
4
Concurrency
5
Concurrency
6
Много интересных докладов в других залах
7
Новичкам в области
многопоточности
Sorry
Перейдите в другой зал
8
Новичкам в области
многопоточности
Sorry
Перейдите в другой зал
Новичкам в неблокирующей
синхронизации
Короткое введение
9
Новичкам в области
многопоточности
Sorry
Перейдите в другой зал
Новичкам в неблокирующей
синхронизации
Короткое введение
Продвинутым многопоточным
программистам
Поговорим о деталях
реализации CAS/atomics!
10
Новичкам в области
многопоточности
Sorry
Перейдите в другой зал
Новичкам в неблокирующей
синхронизации
Короткое введение
Продвинутым многопоточным
программистам
Поговорим о деталях
реализации CAS/atomics!
Хипстерам Поговорим про хайп!
Immutable vs. Mutable
11
Модели
• Модель	с	разделяемой	памятью
- Операции	на	атомарных	регистрах:	read,	write
- Удобно	программировать,	все	привыкли
• Модель	с	передачей	сообщений
- Операции:	send,	onReceive
- Похожа	на	то,	как	реально	работает	железо
12
Терминология
• Нет	устоявшейся	терминологии
• Термины:
- Parallel
- Concurrent
- Distributed
13
Виды параллелизма
• На	уровне	операционной	системы
• На	уровне	одной	программы	/	процесса
14
Параллелизм — ОС
• Слушать	музыку	и	переписываться	в	фейсбуке
в	Одноклассниках
• При	зависании	одной	программы	другие	
продолжают	работать
• и	т.п.
15
Преимущества параллелизма
• Использование	нескольких ядер/процессоров
- Да	и	на	1	ядре	тоже!	(async I/O)
• Простота моделирования
- Абстракция:	фреймворк забирает	сложность
• Упрощенная	обработка	асинхронных событий
• Более	отзывчивые интерфейсы	пользователя
- Event	Dispatch	Thread	(EDT),	async calls
16
Параллелизм на уровне отдельно взятой программы
• Эффективное использование	ресурсов
• Удобство,	простота написания	кода
• Справедливость	
- Обработка	запросов	пользователей	на	серверах	
соцсети с	одинаковым	приоритетом
- Читатели	и	писатели
- Fairness	(честность)
17
Lock lock = new ReentrantLock(true);
18
Честность!
Lock lock = new ReentrantLock(true);
19 Блокировки
Old School
wait()
notify()
notifyAll()
synchronized {
doSomething();
}
public synchronized foo() {
doSomethingElse();
}
В	языке
20 Блокировки
Old School
wait()
notify()
notifyAll()
synchronized {
doSomething();
}
public synchronized foo() {
doSomethingElse();
}
Lock lock = new ReentrantLock();
try {
lock.lock();
doSomething();
} finally {
lock.unlock();
}
В	языке В	библиотеке	(JDK)
java.util.concurrent.*
java.util.concurrent.atomic.*
21
Counter
public interface Counter {
long get();
void increment();
}
22
Simple Counter
public class SimpleCounter implements Counter {
long value = 0;
public long get() {
return value;
}
public void increment() {
value++;
}
}
23
Volatile Counter
public class VolatileCounter implements Counter {
volatile long value = 0;
public long get() {
return value;
}
public void increment() {
value++;
}
}
24
Synchronized Counter
public class SynchronizedCounter implements Counter {
long value = 0;
public synchronized long get() {
return value;
}
public synchronized void increment() {
value++;
}
}
25
Проблемы блокировок
• Взаимоблокировки (Deadlocks)
26
Проблемы блокировок
• Взаимоблокировки (Deadlocks)
• Инверсия приоритетов
27
Проблемы блокировок
• Взаимоблокировки (Deadlocks)
• Инверсия приоритетов
• Надежность — вдруг владелец блокировки помрет?
28
Проблемы блокировок
• Взаимоблокировки (Deadlocks)
• Инверсия приоритетов
• Надежность — вдруг владелец блокировки помрет?
• Performance
– Параллелизма в критической секции нет!
– Владелец блокировки может быть вытеснен планировщиком
29
Закон	Амдала
α часть общего объема вычислений,
которую нельзя распараллелить
1-α часть, которую можно распараллелить
p количество потоков
30
Закон	Амдала
Sp=
𝟏
α#	
𝟏%α
𝐩
α часть общего объема вычислений,
которую нельзя распараллелить
1-α часть, которую можно распараллелить
p количество потоков
Нам нужно что-то другое
Добро пожаловать
в неблокирующую синхронизацию!
33
If-Modify-Write
volatile int value = 0;
if (value == 0) {
value = 42;
}
No	Atomicity
in	terms	of	JMM
34
Compare and Swap
int value = 0;
synchronized (...) {
if (value == 0) {
value = 42;
}
}
35
Введем волшебную операцию
int value = 0;
i.compareAndSet(0, 42);
36
Compare	and	Swap	— Hardware	Support
compare-and-swap
CAS
load-link / store-conditional
LL/SC
cmpxchg
ldrex/strex lwarx/stwcx
37
CAS Semantics
public class PseudoCAS {
private long value;
public synchronized long get() { return value; }
public synchronized long compareAndSwap(long expected, long newV) {
long oldValue = value;
if (oldValue == expected) {
value = newV;
}
return oldValue;
}
public synchronized boolean compareAndSet(long expected, long newV){
return expected == compareAndSwap(expected, newV);
}
}
38 Pseudo-CAS Counter
public class PseudoCasLoopCounter implements Counter {
private PseudoCAS value = new PseudoCAS();
public long get() {
return value.get();
}
public void increment() {
long v;
do {
v = value.get();
} while (value.compareAndSet(v, v + 1));
}
}
39 Pseudo-CAS Counter
public class PseudoCasLoopCounter implements Counter {
private PseudoCAS value = new PseudoCAS();
public long get() {
return value.get();
}
public void increment() {
long v;
do {
v = value.get();
} while (value.compareAndSet(v, v + 1));
}
}
CAS in Java
41
CAS in Java
Since Java 5, JSR166
java.util.concurrent.atomic
• Scalars
• Field updaters
• Arrays
• Compound variables
• Accumulators/Adders
since Java 8
42
Scalars
• AtomicBoolean
• AtomicInteger
• AtomicLong
• AtomicReference
43
Scalars
• AtomicBoolean
• AtomicInteger
• AtomicLong
• AtomicReference
44
• boolean compareAndSet(long expect, long update)
• long addAndGet(long delta)
• long getAndAdd(long delta)
• long getAndDecrement()
• long getAndIncrement()
• long incrementAndGet()
• …
AtomicLong
45
• boolean compareAndSet(long expect, long update)
• long addAndGet(long delta)
• long getAndAdd(long delta)
• long getAndDecrement()
• long getAndIncrement()
• long incrementAndGet()
• …
AtomicLong
46 CAS Counter
public class CasLoopCounter implements Counter {
private AtomicLong value = new AtomicLong();
public long get() {
return value.get();
}
public void increment() {
long v;
do {
v = value.get();
} while (value.compareAndSet(v, v + 1));
}
}
47
Недостатки CAS
Contended CAS —> tons of useless CPU cycles
do {
v = value.get();
} while (value.compareAndSet(v, v + 1));
Написание быстрых и корректных алгоритмов на CAS
требует экспертизы
48
AtomicLong
• boolean compareAndSet(long expect, long update)
• long addAndGet(long delta)
• long getAndAdd(long delta)
• long getAndDecrement()
• long getAndIncrement()
• long incrementAndGet()
• …
49
Get-and-Add Counter
public class CasLoopCounter implements Counter {
private AtomicLong value = new AtomicLong();
public long get() {
return value.get();
}
public void increment() {
value.getAndAdd(1);
}
}
50
atomicLong.getAndAdd(5)
JDK	7u95	 JDK	8u72	
60
9 7 6
100
27 27 27
1 2 3 4
ops	/	μs
threads
51
atomicLong.getAndAdd(5)
JDK	7u95	 JDK	8u72	
60
9 7 6
100
27 27 27
1 2 3 4
ops	/	μs
threads
52
atomicLong.getAndAdd(5)
JDK	7u95	 JDK	8u72	
60
9 7 6
100
27 27 27
1 2 3 4
ops	/	μs
threads
53
loop:
mov 0x10(%rbx),%rax
mov %rax,%r11
add $0x5,%r11
lock cmpxchg %r11,0x10(%rbx)
sete %r11b
movzbl %r11b,%r11d
test %r10d,%r10d
je loop
JDK	7u95				-XX:+PrintAssembly
atomicLong.getAndAdd(5)
54
lock addq $0x5,0x10(%rbp))loop:
mov 0x10(%rbx),%rax
mov %rax,%r11
add $0x5,%r11
lock cmpxchg %r11,0x10(%rbx)
sete %r11b
movzbl %r11b,%r11d
test %r10d,%r10d
je loop
JDK	7u95				-XX:+PrintAssembly JDK	8u77				-XX:+PrintAssembly
atomicLong.getAndAdd(5)
JDK	7u95	 JDK	8u72	
60
9 7 6
100
27 27 27
1 2 3 4
ops	/	μs
threads
55 AtomicLong.getAndAdd()	— JDK	7
56 AtomicLong.getAndAdd()	— JDK	7
cmpxchg
57 AtomicLong.getAndAdd()	— JDK	8
58 AtomicLong.getAndAdd()	— JDK	8
lock addq
JVM	
Intrinsic
59
counterType Cnt Score Error Units
LONG 5 211.247 ± 7.532 ops/us
VOLATILE_LONG 5 24.837 ± 1.664 ops/us
ALFU 5 27.272 ± 1.946 ops/us
SYNCHRONIZED 5 10.231 ± 0.592 ops/us
UNFAIR_LOCK 5 19.959 ± 4.268 ops/us
FAIR_LOCK 5 0.225 ± 0.009 ops/us
CAS_LOOP 5 6.125 ± 0.225 ops/us
ADD_AND_GET 5 26.701 ± 0.620 ops/us
Бенчмарки!
Thanks to Nitsan Wakart
http://psy-lob-saw.blogspot.ru/2014/06/jdk8-update-on-scalable-counters.html
Core(TM) i7-4770
4 x 2 x 1.9 Ghz
(downgraded)
Ubuntu 14.04.3
3.13.0-83-generic
x86_64
taskset -c 0,1,2,3
(thread affinity)
60
Multivariable Invariant
61
Multivariable Invariant
62
Field Updaters
• AtomicIntegerFieldUpdater
– Reflection-based updater for volatile int
• AtomicLongFieldUpdater
– Reflection-based updater for volatile long
• AtomicReferenceFieldUpdater
– Reflection-based updater for volatile object
63
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)
64
Volatile	Counter
public class VolatileCounter implements Counter {
volatile long value = 0;
public long get() {
return value;
}
public void increment() {
value++;
}
}
65
Volatile	Counter
public class VolatileCounter implements Counter {
volatile long value = 0;
public long get() {
return value;
}
public void increment() {
value++;
}
}
66 AtomicLongFieldUpdater-based Counter
private final VolatileCounter counter = new VolatileCounter();
ALFU<VolatileCounter> updater
= ALFU.newUpdater(VolatileCounter.class, "value");
public AFUCounter() throws NoSuchFieldException {
Field field = VolatileCounter.class.getDeclaredField("value");
field.setAccessible(true);
}
public long get() {
return updater.get(counter);
}
public void increment() {
updater.addAndGet(counter, 1);
}
67
AtomicLongFieldUpdater
68
AtomicLongFieldUpdater
69
AtomicArrays
AtomicIntegerArray
AtomicLongArray
AtomicReferenceArray
long addAndGet(int i, long delta)
long getAndAdd(int i, long delta)
boolean compareAndSet(
int i, long exp, long upd)
long incrementAndGet(int i)
…
70
Compound Variables
AtomicMarkableReference V сompareAndSet (
V expectedRef, V newRef,
boolean expectedMark, boolean newMark
)
AtomicStampedReference boolean compareAndSet (
V expectedRef, V newRef,
int expectedStamp, int newStamp
)
71
Accumulators
• DoubleAccumulator
• DoubleAdder
• LongAccumulator
• LongAdder
• (Striped64)
• void accumulate(long x)
• long get()
• long getThenReset()
• void reset()
72
Non-blocking Guarantees
Wait-Free
без ожидания
Per-thread progress is guaranteed
Lock-Free
без блокировок
Overall progress is guaranteed
Obstruction-Free
без препятствий
Per-thread progress is guaranteed
if thread has been isolated
(with all obstructing threads suspended)
73 AtomicLong-based Counter
public class CasCounter implements Counter {
private AtomicLong value = new AtomicLong();
public long get() {
return value.get();
}
public void increment() {
long v;
do {
v = value.get();
} while (value.compareAndSet(v, v + 1));
}
}
Any	guarantees?
A. Wait-Free
B. Lock-Free
C. Obstruction-Free
D. No	guarantees
74 AtomicLong-based Counter
public class CasCounter implements Counter {
private AtomicLong value = new AtomicLong();
public long get() {
return value.get();
}
public void increment() {
long v;
do {
v = value.get();
} while (value.compareAndSet(v, v + 1));
}
}
Any	guarantees?
A. Wait-Free
B. Lock-Free
C. Obstruction-Free
D. No	guarantees
75 AtomicLong-based Counter
public class CasCounter implements Counter {
private AtomicLong value = new AtomicLong();
public long get() {
return value.get();
}
public void increment() {
long v;
do {
v = value.get();
} while (value.compareAndSet(v, v + 1));
}
}
Any	guarantees	on	x64?
A. Wait-Free
B. Lock-Free
C. Obstruction-Free
D. No	guarantees
76 AtomicLong-based Counter
public class CasCounter implements Counter {
private AtomicLong value = new AtomicLong();
public long get() {
return value.get();
}
public void increment() {
long v;
do {
v = value.get();
} while (value.compareAndSet(v, v + 1));
}
}
Any	guarantees	on	x64?
A. Wait-Free
B. Lock-Free
C. Obstruction-Free
D. No	guarantees
CAS в .NET
78
Interlocked
79
Interlocked
Неблокирующие	структуры	данных
81
Неблокирующий	
стек
82
Michael and Scott, 1996
https://www.research.ibm.com/people/m/michael/podc-1996.pdf
Потоки помогают друг другу
Неблокирующая	очередь
Материалы
84
Литература
85
Материалы
• Все-все-все	— bit.ly/concurrency-interest
• Nitsan Wakart — psy-lob-saw.blogspot.com
• Алексей	Шипилёв — shipilev.net
• Андрей	Акиньшин	— aakinshin.net/ru/blog/
Вопросы	и	ответы

More Related Content

What's hot

Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт... Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...Ontico
 
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)Ontico
 
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)Ontico
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)Ontico
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Ontico
 
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)Ontico
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015Alex Chistyakov
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Ontico
 
Облако в Badoo год спустя
Облако в Badoo год спустяОблако в Badoo год спустя
Облако в Badoo год спустяYuriy Nasretdinov
 
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Ontico
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайOntico
 
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Ontico
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Ontico
 
Денис Иванов
Денис ИвановДенис Иванов
Денис ИвановCodeFest
 
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Ontico
 
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Ontico
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Ontico
 
My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016Alex Chistyakov
 
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...Ontico
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Ontico
 

What's hot (20)

Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт... Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
Архитектура растущего проекта на примере ВКонтакте / Алексей Акулович (ВКонт...
 
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
Язык Lua — секреты производительности / Ник Заварицкий (Mail.ru)
 
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
libfpta — обгоняя SQLite и Tarantool / Леонид Юрьев (Positive Technologies)
 
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo) Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
Отладка производительности приложения на Erlang / Максим Лапшин (Erlyvideo)
 
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
Chronicle Map — key-value хранилище для трейдинга на Java / Левентов Роман (C...
 
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
Android Cloud... точнее Cloud из Android / Охрименко Алексей (Acronis)
 
My talk at Highload++ 2015
My talk at Highload++ 2015My talk at Highload++ 2015
My talk at Highload++ 2015
 
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
Flashcache в mamba.ru / Яковлев Александр Юрьевич (ЗАО Мамба)
 
Облако в Badoo год спустя
Облако в Badoo год спустяОблако в Badoo год спустя
Облако в Badoo год спустя
 
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)Эффективная отладка репликации MySQL / Света Смирнова (Percona)
Эффективная отладка репликации MySQL / Света Смирнова (Percona)
 
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов НиколайnoBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
noBackend, или Как выжить в эпоху толстеющих клиентов / Самохвалов Николай
 
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
Оптимизация high-contention write в PostgreSQL / Александр Коротков, Олег Бар...
 
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
Новые технологии репликации данных в PostgreSQL / Александр Алексеев (Postgre...
 
Денис Иванов
Денис ИвановДенис Иванов
Денис Иванов
 
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
Внутреннее устройство PostgreSQL: временные таблицы и фрагментация памяти / Г...
 
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
Что нового и полезного в PostgreSQL 9.5 / Илья Космодемьянский (PostgreSQL-Co...
 
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)Что нового в nginx? / Максим Дунин (Nginx, Inc.)
Что нового в nginx? / Максим Дунин (Nginx, Inc.)
 
My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016My talk on monitoring systems at RootConf 2016
My talk on monitoring systems at RootConf 2016
 
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...OpenResty: превращаем NGINX в полноценный сервер приложений  / Владимир Прота...
OpenResty: превращаем NGINX в полноценный сервер приложений / Владимир Прота...
 
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
Жизнь проекта на production советы по эксплуатации / Николай Сивко (okmeter.io)
 

Viewers also liked

Orta Therox
Orta TheroxOrta Therox
Orta TheroxCodeFest
 
Илья Кудинов
Илья КудиновИлья Кудинов
Илья КудиновCodeFest
 
Kristian Karl
Kristian KarlKristian Karl
Kristian KarlCodeFest
 
Михаил Ройзнер
Михаил РойзнерМихаил Ройзнер
Михаил РойзнерCodeFest
 
Андрей Ситник
Андрей СитникАндрей Ситник
Андрей СитникCodeFest
 
Алексей Ильичев
Алексей ИльичевАлексей Ильичев
Алексей ИльичевCodeFest
 
Никита Арыков и Анастасия Лагунова
Никита Арыков и Анастасия ЛагуноваНикита Арыков и Анастасия Лагунова
Никита Арыков и Анастасия ЛагуноваCodeFest
 
Евгений Брянцев
Евгений БрянцевЕвгений Брянцев
Евгений БрянцевCodeFest
 
Иван Фролков
Иван ФролковИван Фролков
Иван ФролковCodeFest
 
Антон Шаяхов
Антон ШаяховАнтон Шаяхов
Антон ШаяховCodeFest
 
Максим Дорофеев
Максим ДорофеевМаксим Дорофеев
Максим ДорофеевCodeFest
 
Никита Липский и Владимир Парфиненко
Никита Липский и Владимир ПарфиненкоНикита Липский и Владимир Парфиненко
Никита Липский и Владимир ПарфиненкоCodeFest
 
Денис Паясь
Денис ПаясьДенис Паясь
Денис ПаясьCodeFest
 
Вадим Макеев
Вадим МакеевВадим Макеев
Вадим МакеевCodeFest
 

Viewers also liked (14)

Orta Therox
Orta TheroxOrta Therox
Orta Therox
 
Илья Кудинов
Илья КудиновИлья Кудинов
Илья Кудинов
 
Kristian Karl
Kristian KarlKristian Karl
Kristian Karl
 
Михаил Ройзнер
Михаил РойзнерМихаил Ройзнер
Михаил Ройзнер
 
Андрей Ситник
Андрей СитникАндрей Ситник
Андрей Ситник
 
Алексей Ильичев
Алексей ИльичевАлексей Ильичев
Алексей Ильичев
 
Никита Арыков и Анастасия Лагунова
Никита Арыков и Анастасия ЛагуноваНикита Арыков и Анастасия Лагунова
Никита Арыков и Анастасия Лагунова
 
Евгений Брянцев
Евгений БрянцевЕвгений Брянцев
Евгений Брянцев
 
Иван Фролков
Иван ФролковИван Фролков
Иван Фролков
 
Антон Шаяхов
Антон ШаяховАнтон Шаяхов
Антон Шаяхов
 
Максим Дорофеев
Максим ДорофеевМаксим Дорофеев
Максим Дорофеев
 
Никита Липский и Владимир Парфиненко
Никита Липский и Владимир ПарфиненкоНикита Липский и Владимир Парфиненко
Никита Липский и Владимир Парфиненко
 
Денис Паясь
Денис ПаясьДенис Паясь
Денис Паясь
 
Вадим Макеев
Вадим МакеевВадим Макеев
Вадим Макеев
 

Similar to Алексей Федоров

Синхронизация без блокировок и СМС
Синхронизация без блокировок и СМССинхронизация без блокировок и СМС
Синхронизация без блокировок и СМСAlexey Fyodorov
 
Atomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithmsAtomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithmsAlexey Fyodorov
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned Alexander Syrotenko
 
Nonblocking algorithms/CAS/Atomics by Alexey Fyodorov
Nonblocking algorithms/CAS/Atomics by Alexey FyodorovNonblocking algorithms/CAS/Atomics by Alexey Fyodorov
Nonblocking algorithms/CAS/Atomics by Alexey FyodorovJavaDayUA
 
Java Ahead-Of-Time compilation
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilationNikita Lipsky
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeYehor Herasymchuk
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Alexander Syrotenko
 
Как сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееКак сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееRoman Dvornov
 
Практический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLПрактический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLAlex Chistyakov
 
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoFDmitry Buzdin
 
Статический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибокСтатический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибокAndrey Karpov
 
Занимательные истории из жизни технической поддержки JVM
Занимательные истории из жизни технической поддержки JVMЗанимательные истории из жизни технической поддержки JVM
Занимательные истории из жизни технической поддержки JVMNikita Lipsky
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)Alexander Gornik
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаRoman Dvornov
 
Scala performance под капотом
Scala performance под капотомScala performance под капотом
Scala performance под капотомRoman Grebennikov
 
История небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир БородинИстория небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир БородинYandex
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)Nikolay Samokhvalov
 
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMPВебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMPFlyElephant
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, ParallelsNikolay Samokhvalov
 

Similar to Алексей Федоров (20)

Синхронизация без блокировок и СМС
Синхронизация без блокировок и СМССинхронизация без блокировок и СМС
Синхронизация без блокировок и СМС
 
Atomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithmsAtomics, CAS and Nonblocking algorithms
Atomics, CAS and Nonblocking algorithms
 
How to cook a blockchain and not get burned
How to cook a blockchain and not get burned How to cook a blockchain and not get burned
How to cook a blockchain and not get burned
 
Nonblocking algorithms/CAS/Atomics by Alexey Fyodorov
Nonblocking algorithms/CAS/Atomics by Alexey FyodorovNonblocking algorithms/CAS/Atomics by Alexey Fyodorov
Nonblocking algorithms/CAS/Atomics by Alexey Fyodorov
 
Java Ahead-Of-Time compilation
Java Ahead-Of-Time compilationJava Ahead-Of-Time compilation
Java Ahead-Of-Time compilation
 
Zero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And ForgeZero Downtime PHP Deployment with Envoyer And Forge
Zero Downtime PHP Deployment with Envoyer And Forge
 
Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?Multithreading in JS. Myth or reality?
Multithreading in JS. Myth or reality?
 
Как сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрееКак сделать ваш JavaScript быстрее
Как сделать ваш JavaScript быстрее
 
Практический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQLПрактический опыт использования некоторых современных решений репликации MySQL
Практический опыт использования некоторых современных решений репликации MySQL
 
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
CodeFest 2012. Липский Н. — JIT vs. AOT. Единство и борьба динамического и ст...
 
Java Platform Performance BoF
Java Platform Performance BoFJava Platform Performance BoF
Java Platform Performance BoF
 
Статический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибокСтатический анализ кода: борьба с удорожанием ошибок
Статический анализ кода: борьба с удорожанием ошибок
 
Занимательные истории из жизни технической поддержки JVM
Занимательные истории из жизни технической поддержки JVMЗанимательные истории из жизни технической поддержки JVM
Занимательные истории из жизни технической поддержки JVM
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)
 
Масштабируемая архитектура фронтенда
Масштабируемая архитектура фронтендаМасштабируемая архитектура фронтенда
Масштабируемая архитектура фронтенда
 
Scala performance под капотом
Scala performance под капотомScala performance под капотом
Scala performance под капотом
 
История небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир БородинИстория небольшого успеха с PostgreSQL – Владимир Бородин
История небольшого успеха с PostgreSQL – Владимир Бородин
 
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
2014.09.24 история небольшого успеха с PostgreSQL (Yandex)
 
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMPВебинар: Основы распараллеливания С++ программ при помощи OpenMP
Вебинар: Основы распараллеливания С++ программ при помощи OpenMP
 
2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels2014.12.23 Александр Андреев, Parallels
2014.12.23 Александр Андреев, Parallels
 

More from CodeFest

Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander GraebeCodeFest
 
Никита Прокопов
Никита ПрокоповНикита Прокопов
Никита ПрокоповCodeFest
 
Денис Баталов
Денис БаталовДенис Баталов
Денис БаталовCodeFest
 
Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена ГальцинаCodeFest
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр КалашниковCodeFest
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина ИвановаCodeFest
 
Marko Berković
Marko BerkovićMarko Berković
Marko BerkovićCodeFest
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис КортуновCodeFest
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр ЗиминCodeFest
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей КрапивенскийCodeFest
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей ИгнатовCodeFest
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай КрапивныйCodeFest
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander GraebeCodeFest
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим СмирновCodeFest
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин ОсиповCodeFest
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele RialdiCodeFest
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим ПугачевCodeFest
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene GroeschkeCodeFest
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван БондаренкоCodeFest
 
Mete Atamel
Mete AtamelMete Atamel
Mete AtamelCodeFest
 

More from CodeFest (20)

Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Никита Прокопов
Никита ПрокоповНикита Прокопов
Никита Прокопов
 
Денис Баталов
Денис БаталовДенис Баталов
Денис Баталов
 
Елена Гальцина
Елена ГальцинаЕлена Гальцина
Елена Гальцина
 
Александр Калашников
Александр КалашниковАлександр Калашников
Александр Калашников
 
Ирина Иванова
Ирина ИвановаИрина Иванова
Ирина Иванова
 
Marko Berković
Marko BerkovićMarko Berković
Marko Berković
 
Денис Кортунов
Денис КортуновДенис Кортунов
Денис Кортунов
 
Александр Зимин
Александр ЗиминАлександр Зимин
Александр Зимин
 
Сергей Крапивенский
Сергей КрапивенскийСергей Крапивенский
Сергей Крапивенский
 
Сергей Игнатов
Сергей ИгнатовСергей Игнатов
Сергей Игнатов
 
Николай Крапивный
Николай КрапивныйНиколай Крапивный
Николай Крапивный
 
Alexander Graebe
Alexander GraebeAlexander Graebe
Alexander Graebe
 
Вадим Смирнов
Вадим СмирновВадим Смирнов
Вадим Смирнов
 
Константин Осипов
Константин ОсиповКонстантин Осипов
Константин Осипов
 
Raffaele Rialdi
Raffaele RialdiRaffaele Rialdi
Raffaele Rialdi
 
Максим Пугачев
Максим ПугачевМаксим Пугачев
Максим Пугачев
 
Rene Groeschke
Rene GroeschkeRene Groeschke
Rene Groeschke
 
Иван Бондаренко
Иван БондаренкоИван Бондаренко
Иван Бондаренко
 
Mete Atamel
Mete AtamelMete Atamel
Mete Atamel
 

Алексей Федоров