Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Concurrency, Message Passing & STM [rus]
Search
Oleksii Kachaiev
November 07, 2013
Programming
4
430
Concurrency, Message Passing & STM [rus]
Lecture for KPI students [russian language]
Oleksii Kachaiev
November 07, 2013
Tweet
Share
More Decks by Oleksii Kachaiev
See All by Oleksii Kachaiev
Counting HTTP with QUIC & HTTP/3
kachayev
2
230
Talking SQL to Strangers
kachayev
3
520
Counting HTTP: 0.9...3
kachayev
1
62
Managing Data Chaos in The World of Microservices
kachayev
3
620
Deep HTTP Dive Through Aleph & Netty
kachayev
6
3.7k
Keep Your Data Safe With Refined Types
kachayev
4
1.4k
Clojure at Attendify (2nd ed)
kachayev
5
1.5k
Clojure at Attendify
kachayev
4
320
Finagle & Clojure
kachayev
6
1.3k
Other Decks in Programming
See All in Programming
KMP와 kotlinx.rpc로 서버와 클라이언트 동기화
kwakeuijin
0
300
20年もののレガシープロダクトに 0からPHPStanを入れるまで / phpcon2024
hirobe1999
0
1k
Amazon Nova Reelの可能性
hideg
0
200
PSR-15 はあなたのための ものではない? - phpcon2024
myamagishi
0
400
20241217 競争力強化とビジネス価値創出への挑戦:モノタロウのシステムモダナイズ、開発組織の進化と今後の展望
monotaro
PRO
0
290
“あなた” の開発を支援する AI エージェント Bedrock Engineer / introducing-bedrock-engineer
gawa
3
130
ecspresso, ecschedule, lambroll を PipeCDプラグインとして動かしてみた (プロトタイプ) / Running ecspresso, ecschedule, and lambroll as PipeCD Plugins (prototype)
tkikuc
2
1.9k
AppRouterを用いた大規模サービス開発におけるディレクトリ構成の変遷と問題点
eiganken
1
450
Azure AI Foundryのご紹介
qt_luigi
1
210
Swiftコンパイラ超入門+async関数の仕組み
shiz
0
170
Package Traits
ikesyo
1
210
DMMオンラインサロンアプリのSwift化
hayatan
0
190
Featured
See All Featured
KATA
mclloyd
29
14k
Practical Orchestrator
shlominoach
186
10k
XXLCSS - How to scale CSS and keep your sanity
sugarenia
248
1.3M
Raft: Consensus for Rubyists
vanstee
137
6.7k
Templates, Plugins, & Blocks: Oh My! Creating the theme that thinks of everything
marktimemedia
28
2.2k
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
8
1.2k
Typedesign – Prime Four
hannesfritz
40
2.5k
Faster Mobile Websites
deanohume
305
30k
RailsConf & Balkan Ruby 2019: The Past, Present, and Future of Rails at GitHub
eileencodes
132
33k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
226
22k
No one is an island. Learnings from fostering a developers community.
thoeni
19
3.1k
Site-Speed That Sticks
csswizardry
3
270
Transcript
Modern concurrency Erlang, Scala, Go, Clojure, Haskell Алексей Качаев, 2013
Обо мне •CTO в Attendify.com •Erlang, Go, Clojure, Scala •СPython
& Twitter Storm contributor •Автор библиотеки fn.py •Хобби: Haskell, Scheme, CRDT, системы типов, компиляторы
Искать •@kachayev •github: kachayev •
[email protected]
О чем? •Concurrency VS. parallelism •Задачи из теории и практики
•Проблемы с OS threads & locks •MP VS. STM •Почему вдруг FP имеет значение?
Concurrency is not parallelism
© Rob Pike Concurrency is the composition of independently executing
computations. Concurrency is a way to structure software...
Задачи •Ограниченные ресурсы, неограниченные потребности •Теория: “Спящий парикмахер” •Практика: Cache
manager для листинга изображений
Use locks, Luke!
“Решение” •проверить ресурсы на диске •lock HM, проверить загружающих, unlock
HM •HTTP HEAD + Content-Length •lock счетчик ресурсов, вычесть размер, unlock •HTTP body сбросить на диск
Да ну?
Решение?? •что делать с ошибками во время загрузки изображения? •что
делать с “ожидающими” очистки свободного места •как насчет “10 x 1mb лучше чем 1 x 10mb”?
Решение?? •как “убить задачу”, если изображение уже не нужно? •что
если нужно запустить 1000+ скачиваний одновременно? •вы уверены, что расставили locks правильно?
© Jonas Boner •Locks do not compose •Locks break encapsulation
•Taking too few/many/wrong locks •Taking locks in wrong order •Error recovery is hard
Проблема •мир устроен по другому •ошибки в критической секции непоправимы
•узнаете об ошибке в продакшине
Как жить дальше?
Задача Есть некий офис с сотней программистов, и доска с
табличкой “задач сделано ...”. У каждого свои задачи. По выполнению нужно сделать +1. Как организовать работу?
Подходы •Message passing (обмен сообщениями) •STM (транзационная память) •Dataflow (потоковое
управление)
Message passing Erlang, Scala, Go
Actor •изолированный легкий “процесс” •нет общей памяти •обмен сообщениями через
mailbox •“location transparency”
Erlang
None
None
STM Clojure, Haskell
Память это база данных
Clojure •задумана “for concurrency” •Identity VS. Value •STM - синхронные
и координированные изменения •Agents - асинхронные и независимые •Atom - синхронное изменение
Clojure
None
None
Dataflow Oz ~ Scala, Clojure, Haskell, ...
Dataflow Ваше домашнее задание :)
ФП •lambda calculus •side-effects free •детерминированные вычисления •immutable значения •бесмысленность
“присваивания”
Ограничения Everything that can go wrong will go wrong ©
Murphy
Муки выбора •distribution → MP •некоординированное чтение → SMP •низкоуровневый
код → locks
Муки выбора •никакой серебрянной пули •выбирайте идеоматичный подход •выбирайте идеоматичную
технологию •зрите в корень
А также
СML
Go: channel •Тот же CSP •Транспортный слой •Грубая аналогия: имя
файла VS. дескриптор файла •Еще одна: channel ≈ портабельный mailbox
Scala: Akka •библиотека Akka → core •очень (!) похоже на
Erlang •сутью actor-а является состояние •yield-механизм намного слабее
А также... •Clojure core.async •CloudHaskell •Haxl •CRDT(s) •Bloom
Ссылки •Эта презентация: https:// speakerdeck.com/kachayev •Haskell: http://goo.gl/NxdDSv •Clojure: http://clojure.org/ •Go:
http://golang.org/ •Scala: http://www.scala-lang.org/ •Erlang: http://www.erlang.org/