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
460
4
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
Concurrency, Message Passing & STM [rus]
Lecture for KPI students [russian language]
Oleksii Kachaiev
November 07, 2013
More Decks by Oleksii Kachaiev
See All by Oleksii Kachaiev
Counting HTTP with QUIC & HTTP/3
kachayev
2
310
Talking SQL to Strangers
kachayev
3
640
Counting HTTP: 0.9...3
kachayev
1
140
Managing Data Chaos in The World of Microservices
kachayev
3
700
Deep HTTP Dive Through Aleph & Netty
kachayev
6
4.1k
Keep Your Data Safe With Refined Types
kachayev
4
1.5k
Clojure at Attendify (2nd ed)
kachayev
5
1.7k
Clojure at Attendify
kachayev
4
400
Finagle & Clojure
kachayev
6
1.4k
Other Decks in Programming
See All in Programming
「AIで開発し、AIを届ける」をEvalでつなぐ 〜AIネイティブに始めるプロダクト開発の実践〜 / Connecting "Develop with AI, deliver AI" with Eval
rkaga
4
5.3k
生成AI時代にこそ効くGo | Why Go Works in the Age of Generative AI
mom0tomo
8
3.3k
ローカルLLMでどこまでコードが書けるか -拡張版 / How much code can be written on a local LLM Extended
kishida
11
4.3k
AIで効率化できた業務・日常
ochtum
0
140
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.7k
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
140
Vue × Nuxt × Oxc どこまで使える?実運用の現在地
andpad
0
270
AI 時代のソフトウェア設計の学び方
masuda220
PRO
29
13k
Datadog × OpenTelemetry 入門と実践のあいだ
kn_to_maxpno
1
160
Spring Security 実践 ─ GraphQL APIで実務に役立つ 認証・認可 を学ぶ
wagyu
0
250
軽量Java基盤の設計 DIコンテナに頼らない、長期保守と1秒起動の実現 JJUG CCC 2026 Spring
macha64
0
540
過去最大のMCPアップデート! 2026-07-28 RC版の謎に迫る
licux
6
360
Featured
See All Featured
The MySQL Ecosystem @ GitHub 2015
samlambert
251
13k
The Psychology of Web Performance [Beyond Tellerrand 2023]
tammyeverts
49
3.5k
Color Theory Basics | Prateek | Gurzu
gurzu
0
370
For a Future-Friendly Web
brad_frost
183
10k
Design in an AI World
tapps
1
250
Leading Effective Engineering Teams in the AI Era
addyosmani
9
2.1k
Optimising Largest Contentful Paint
csswizardry
37
3.7k
Improving Core Web Vitals using Speculation Rules API
sergeychernyshev
21
1.5k
How to Grow Your eCommerce with AI & Automation
katarinadahlin
PRO
1
210
I Don’t Have Time: Getting Over the Fear to Launch Your Podcast
jcasabona
34
2.8k
How People are Using Generative and Agentic AI to Supercharge Their Products, Projects, Services and Value Streams Today
helenjbeal
1
220
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
2.8k
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/