Ангелыидемонымногопоточногопрограммирования
АлексейФедоров,Одноклассники
Зачемвыздесь?
3Concurrency
4Concurrency
5
Чего не будет в презентации
• Определенийизучебника- Большеинтересуетсамаконцепция
• Сравненияпроизводительности• Советов,какправильнописатькод• Холиваров*• Серебряныхпуль,волшебныхфреймворков ит.п.
*Нет,нуесликто-то оченьзахочет,томожно, конечно…
6
А что будет-то?
• Парапростыхмногопоточныхпримеров• Кучасвязанныхснимипроблем• Вариантырешений- Которые,разумеется,неработают- Нунекоторыеработают- Иногда- Наверное…
7
Пререквизиты
Нужнопримерно понимать,чтотакое• процесс• поток / нить• синхронизация• блокировка• volatile
Пример.Банковскиеаккаунты
9
10
public void transfer (Account from, Account to, int amount) {
if (from.get() < amount) {throw new RuntimeException();
} else { from.set(from.get() - amount);to.set(to.get() + amount);
}}
11
public void transfer (Account from, Account to, int amount) {
if (from.get() < amount) {throw new RuntimeException();
} else { from.set(from.get() - amount);to.set(to.get() + amount);
}
}
Какиетутестьпроблемывмногопоточнойсреде?
12
Кто такой lock
• lock.lock- Входвкритическуюсекцию
- свободно— взять- занято— ждать,покаосвободится
• lock.unlock- Выходизкритическойсекции
- освободить
13
public void transfer (Account from, Account to, int amount) {
lock(bank);if (from.get() < amount) {
throw new RuntimeException();} else {
from.set(from.get() - amount);to.set(to.get() + amount);
}unlock(bank);
}
14
public void transfer (Account from, Account to, int amount) {
lock(bank);if (from.get() < amount) {
throw new RuntimeException();} else {
from.set(from.get() - amount);to.set(to.get() + amount);
}unlock(bank);
}
Атутвчемпроблема?
15
public void transfer (Account from, Account to, int amount) {
lock(from); lock(to);if (from.get() < amount) {
throw new RuntimeException();} else {
from.set(from.get() - amount);to.set(to.get() + amount);
}unlock(to); unlock(from);
}
Атутвчемпроблема?
Проблемаобедающихфилософов
Dijkstra,1965Hoare,1985Чтоэто?
17
• 5философовпокругу– Тарелкаседойпередкаждым– Вилкимеждутарелками
• Каждыйможет– Размышлять– Братьсоседнюювилку– Есть(строгодвумявилками!)– Кластьоднувилку
Задача о философах
18
Проблемы с обедающими философами
Пустькаждыйфилософдействуетпонекоторомуалгоритму• Могутливсефилософыумеретьсголоду?• Можнолисоставитьтакойалгоритм,чтобывсефилософыгарантированно неумерлисголоду?
19
Параметры задачи
• Количествофилософов• Естьливозможностьположитьвилку,непожрамши• Скольковременифилософест- Фиксированноеилислучайнаявеличина
• Скольковременифилософразмышляет• Какиеещёинструменты/элементыестьвсистеме?• Чтоещё?
20
Простое решение
• Когдафилософхочетесть,онделаетследующиешаги:1. Берётлевуюотсебявилку2. Берётправуюотсебявилку3. Ест4. Кладётоднувилку5. Кладётдругуювилку6. Размышляет
• Итакпокругу
21Философы в коде
while (true) {take(leftFork);take(rightFork);eat();put(rightFork);put (leftFork);think();
}
Deadlock
24Философы в коде
while (true) {take(leftFork);take(rightFork);eat();put(rightFork);put (leftFork);think();
}
25Философы в коде
while (true) {take(leftFork);take(rightFork);eat();put(rightFork);put (leftFork);think();
}
Теория
27
Ресурсы и взаимоблокировка
Ресурс – объект,ккоторомупредоставляетсядоступ
Вовремяработыпроцессможетбрать(захватывать)ресурсы
28
Взаимоблокировка (Deadlock)
Взаимоблокировка – такоесостояниесистемы,прикоторомдваилиболеепроцессовнемогутпродолжатьсвоёвыполнениеиз-заотсутствиянеобходимыхдляэтогоресурсов.
Каждыйждётдругого,поэтомуниктонеможетпродолжить
29
Выгружаемые и невыгружаемые ресурсы
• Выгружаемыересурсы— ресурсы,которыемогут бытьбезболезненноотобраныупроцесса,которыйимиобладает
• Невыгружаемыересурсы— ресурсы,которыенельзяотобратьупроцесса,невызвавприэтомсбойввычислениях
• Мыбудемговорить,восновном,оневыгружаемыхресурсах
30
Операции над невыгружаемыми ресурсами
• Запросресурса- Берём ресурс- илиждём (встаёмв«очередь»ожидания)
• Использованиересурса• Освобождениересурса
31
Виды блокирующих запросов
• безтаймаута• стаймаутом• сисключением(ошибкой)
32
Условия возникновения взаимоблокировок
Коффман,19711. Условиевзаимногоисключения2. Условиеудержанияиожидания3. Условиеневыгружаемости4. Условиециклическогоожидания
33
Условие взаимного исключения
Каждыйресурслибовыделенвданныймомент толькоодному процессу,либодоступен длявсех.
34
Условие удержания и ожидания
Процессы,удерживающиевданныймоментранеевыделенныеимресурсы,могут запрашиватьновыересурсы.
35
Условие невыгружаемости
Ранеевыделенныересурсынемогутбытьпринудительноотобраны упроцесса.
Онидолжныбытьявнымобразомвысвобожденытемпроцессом,которыйихудерживает.
36
Условие циклического ожидания
Должнасуществоватькольцеваяпоследовательностьиздвухиболеепроцессов,каждыйизкоторыхожидаетвысвобожденияресурса,удерживаемогоследующимчленомпоследовательности.
37 Моделирование взаимоблокировок
Ресурсзанят Запросресурса
A
P
B
Q
38 Моделирование взаимоблокировок
Ресурсзанят Запросресурса Взаимоблокировка
A
P
B
Q
C
S
D
R
Графожидания(Holt,1972)
39Условия возникновения взаимоблокировок — ещё раз
Коффман,19711. Условиевзаимногоисключения2. Условиеудержанияиожидания3. Условиеневыгружаемости4. Условиециклическогоожидания
40 Найдите Deadlock
C S
F
R A
D
U
T
B
V
E
GW
41 Найдите Deadlock
C S
F
R A
D
U
T
B
V
E
GW
Стратегииборьбысблокировками
43
Стратегии борьбы с блокировками
• Игнорированиепроблемы• Обнаружениеивосстановление• Динамическоеуклонение• ПредотвращениезасчётподавлениялюбогоизчетырёхусловийКоффмана
44
Кто использует стратегии борьбы?
• Базыданных- Блокировкинастроках,таблицах,индексахит.д.
45
Алгоритм Страуса
BirdStraush,1974
46
Алгоритм Страуса
BirdStraush,1974до.н.э.
47
Алгоритм Страуса
(Делаемвид,чтопроблемаотсутствует)
ЭтоОК? ?
48
Алгоритм Страуса
(Делаемвид,чтопроблемаотсутствует)
• Насколькочастовозникаетпроблема?• Какчастовозникаютсбоивсистемеподругимпричинам?
• Насколькосерьёзнымогутбытьпоследствия?
49 Обнаружение взаимоблокировок и восстановление работоспособности
• Шаги- Позволить блокировкепроизойти- Пытатьсяобнаружить моментвозникновения- Попробоватьвосстановить работоспособность
Внашемпримереможнопростоперезапускатьфилософов
50
Выход из взаимоблокировки
• Приоритетный захватресурсов- Приоритезировать (все)процессы- Отобратьресурсуменееприоритетногопроцесса
• Откат (см.след.слайд)• Уничтожениеиперезапуск процессов
51
52
Выход из взаимоблокировки — Откат
• Периодическисоздаютсяконтрольныеточки• Приобнаруженииблокировкипроисходитоткат• Приоткатечастьработы(котораябылавыполненапослепрохожденияпоследнейконтрольнойточки)теряется
• Пример:MSSQLServer- Привзаимнойблокировкедвумятранзакциямидругдругавыбираетсяоднаизних(«жертва»),которуюсервероткатывает.
53
Уклонение от взаимоблокировки
• Алгоритмбанкира(Дейкстра,1965)• Воснове— идеяотраекториях
54
• Алгоритмбанкира(Дейкстра,1965)• Воснове— идеяотраекториях
I,scheduler
55
Предотвращение взаимоблокировки
• Атакаусловиявзаимногоисключения• Атакаусловияожиданияиудержания• Атакаусловияциклическогоожидания• Атакаусловияневыгружаемости
56
Атака условия взаимного исключения
• Возможнаредко— частопрограммастановитсянекорректной
• Идея— убиратьненужныеблокировки- Делатьнужноосторожно,чтобыфункциональностьнестрадала
- Заменятьнадругиемеханизмы типаCAS
57
Атака условия ожидания и удержания
• Запрашивать ВСЕнеобходимыересурсыневпроцессеработы,адоначалаработы- Ноневсегдаресурсыизвестнызаранее
• Вначалевременновысвободить всеудерживаемыересурсы- атомарно?
58
Атака условия циклического ожидания
C
S
D
R
59
Атака условия циклического ожидания
• Нумерацияресурсов!- Захватывать ресурсытольковпорядкевозрастанияномеров
1
2 3
4
51
2
3
4
5C
S
D
R
60
Вернемся к философам
1
2 3
4
5
61
Пронумеруем философов и вилки
3
1
2 3
4
51
2 4
5
Этоработает
63
Пронумеровали вилки
• Ура!Количествосъеденногопостояннорастет!- Значитлиэто,чтониктоизфилософовнеголодает?
64
291200
1
2 3
4
5170 2028000
10800
10
65
Голодание (Starvation)
• Голодание— ситуация,вкоторойпоток,откоторогоожидаетсяпрогресс,(практически)стоитнаместе.
66
Голодание (Starvation)
• Голодание— ситуация,вкоторойпоток,откоторогоожидаетсяпрогресс,(практически)стоитнаместе.
• Заблуждение- Голоданиеможетосуществиться,толькоеслипотокисболеевысокимприоритетомпостоянноберутресурсы,которыенужнынизкоприоритетному
67
Атака условия невыгружаемости
• Разрешитьвыгружать!
68
Livelock
69
Livelock
• Системазанятакакой-тоработой• Приэтомпрогрессанет
70
Распределенные блокировки
DR
71
Распределенные блокировки
D?
72
73
Решение
• Думатьголовой• Неиспользоватьблокировкитам,гдененужно
• Братькакможнопозже• Отпускатькакможнораньше
• Использоватьсистемыбезблокировок (CASetc.)• Носнимиестьсвоипроблемы
74
Решение
• Думатьголовой• Неиспользоватьблокировкитам,гдененужно
• Братькакможнопозже• Отпускатькакможнораньше
• Использоватьсистемыбезблокировок (CASetc.)• Носнимиестьсвоипроблемы• Враспределеннойсистемеснесколькимидата–
центрамиблокировки— этоогромнаяпроблема
Литература
76Литература
Вопросыиответы
Спасибозавнимание!
Top Related