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
Snowflake Summitでの新機能 CoCo / CoWork / snowflake-summit-2026-overall-what-new-coco
tatsuhiro
1
150
脅威をエンジニアリングの糧にして――現場編 / Turning Threats into Engineering Fuel — Field Edition
nrslib
0
290
CSC307 Lecture 17
javiergs
PRO
0
320
AIで効率化できた業務・日常
ochtum
0
140
[2026年度第1回ORセミナー] 計画最適化ベンチャーと競技プログラミング人材
terryu16
0
270
気圧・高度・GPSを記録&可視化するアプリ「Koudo」を作った話
hjmkth
1
290
気づいたらRubyで100作品 ー クリエイティブコーディングが生活の一部になるまで / 100 Ruby Sketches Later: How Creative Coding Became Part of My Life
chobishiba
3
590
Contextとはなにか
chiroruxx
1
330
Go1.27で導入されるジェネリクスメソッドでできること
mackee
0
140
A2UI という光を覗いてみる
satohjohn
1
140
代数的データ型って何が嬉しいの? #frontend_phpcon_do
kajitack
8
3.7k
ADKを使って簡単にAIエージェントを作ってみよう
k1mu21
0
270
Featured
See All Featured
The Anti-SEO Checklist Checklist. Pubcon Cyber Week
ryanjones
0
170
Learning to Love Humans: Emotional Interface Design
aarron
275
41k
Design and Strategy: How to Deal with People Who Don’t "Get" Design
morganepeng
133
19k
brightonSEO & MeasureFest 2025 - Christian Goodrich - Winning strategies for Black Friday CRO & PPC
cargoodrich
3
730
Noah Learner - AI + Me: how we built a GSC Bulk Export data pipeline
techseoconnect
PRO
0
200
YesSQL, Process and Tooling at Scale
rocio
174
15k
The Illustrated Guide to Node.js - THAT Conference 2024
reverentgeek
1
390
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Hiding What from Whom? A Critical Review of the History of Programming languages for Music
tomoyanonymous
2
860
Efficient Content Optimization with Google Search Console & Apps Script
katarinadahlin
PRO
1
630
Agile Leadership in an Agile Organization
kimpetersen
PRO
0
170
The Curious Case for Waylosing
cassininazir
1
390
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/