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
440
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
280
Talking SQL to Strangers
kachayev
3
570
Counting HTTP: 0.9...3
kachayev
1
89
Managing Data Chaos in The World of Microservices
kachayev
3
660
Deep HTTP Dive Through Aleph & Netty
kachayev
6
3.8k
Keep Your Data Safe With Refined Types
kachayev
4
1.5k
Clojure at Attendify (2nd ed)
kachayev
5
1.6k
Clojure at Attendify
kachayev
4
350
Finagle & Clojure
kachayev
6
1.3k
Other Decks in Programming
See All in Programming
Amazon ECS Managed Instances が リリースされた!キャッチアップしよう!! / Let's catch up Amazon ECS Managed Instances
cocoeyes02
0
110
社会人になっても趣味開発を続けたい! / traPavilion
mazrean
1
120
コードとあなたと私の距離 / The Distance Between Code, You, and I
hiro_y
0
210
Temporal Knowledge Graphで作る! 時間変化するナレッジを扱うAI Agentの世界
po3rin
5
1.1k
AI 駆動開発におけるコミュニティと AWS CDK の価値
konokenj
5
300
kiroとCodexで最高のSpec駆動開発を!!数時間で web3ネイティブなミニゲームを作ってみたよ!
mashharuki
0
1k
マンガアプリViewerの大画面対応を考える
kk__777
0
430
Claude Agent SDK を使ってみよう
hyshu
0
1.4k
iOSでSVG画像を扱う
kishikawakatsumi
0
180
業務でAIを使いたい話
hnw
0
210
EMこそClaude Codeでコード調査しよう
shibayu36
0
500
pnpm に provenance のダウングレード を検出する PR を出してみた
ryo_manba
1
170
Featured
See All Featured
Building Adaptive Systems
keathley
44
2.8k
Java REST API Framework Comparison - PWX 2021
mraible
34
8.9k
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.5k
Building Better People: How to give real-time feedback that sticks.
wjessup
370
20k
10 Git Anti Patterns You Should be Aware of
lemiorhan
PRO
658
61k
Code Reviewing Like a Champion
maltzj
526
40k
How to Think Like a Performance Engineer
csswizardry
27
2.2k
Intergalactic Javascript Robots from Outer Space
tanoku
273
27k
Gamification - CAS2011
davidbonilla
81
5.5k
Embracing the Ebb and Flow
colly
88
4.9k
Understanding Cognitive Biases in Performance Measurement
bluesmoon
31
2.7k
Producing Creativity
orderedlist
PRO
348
40k
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/