Задачи
•Ограниченные ресурсы,
неограниченные потребности
•Теория: “Спящий парикмахер”
•Практика: Cache manager для
листинга изображений
Slide 8
Slide 8 text
Use locks,
Luke!
Slide 9
Slide 9 text
“Решение”
•проверить ресурсы на диске
•lock HM, проверить загружающих,
unlock HM
•HTTP HEAD + Content-Length
•lock счетчик ресурсов, вычесть
размер, unlock
•HTTP body сбросить на диск
Slide 10
Slide 10 text
Да ну?
Slide 11
Slide 11 text
Решение??
•что делать с ошибками во время
загрузки изображения?
•что делать с “ожидающими”
очистки свободного места
•как насчет “10 x 1mb лучше чем 1 x
10mb”?
Slide 12
Slide 12 text
Решение??
•как “убить задачу”, если
изображение уже не нужно?
•что если нужно запустить 1000+
скачиваний одновременно?
•вы уверены, что расставили locks
правильно?
Проблема
•мир устроен по другому
•ошибки в критической секции
непоправимы
•узнаете об ошибке в продакшине
Slide 15
Slide 15 text
Как
жить
дальше?
Slide 16
Slide 16 text
Задача
Есть некий офис с сотней
программистов, и доска с
табличкой “задач сделано ...”.
У каждого свои задачи. По
выполнению нужно сделать
+1. Как организовать работу?
Actor
•изолированный легкий “процесс”
•нет общей памяти
•обмен сообщениями через mailbox
•“location transparency”
Slide 20
Slide 20 text
Erlang
Slide 21
Slide 21 text
No content
Slide 22
Slide 22 text
No content
Slide 23
Slide 23 text
STM
Clojure, Haskell
Slide 24
Slide 24 text
Память
это
база данных
Slide 25
Slide 25 text
Clojure
•задумана “for concurrency”
•Identity VS. Value
•STM - синхронные и
координированные изменения
•Agents - асинхронные и
независимые
•Atom - синхронное изменение