Concurrency, Message Passing & STM [rus]

Concurrency, Message Passing & STM [rus]

Lecture for KPI students [russian language]

B9b7a5ffa24e2af6f877a7950461ba0f?s=128

Oleksii Kachaiev

November 07, 2013
Tweet

Transcript

  1. Modern concurrency Erlang, Scala, Go, Clojure, Haskell Алексей Качаев, 2013

  2. Обо мне •CTO в Attendify.com •Erlang, Go, Clojure, Scala •СPython

    & Twitter Storm contributor •Автор библиотеки fn.py •Хобби: Haskell, Scheme, CRDT, системы типов, компиляторы
  3. Искать •@kachayev •github: kachayev •kachayev@gmail.com

  4. О чем? •Concurrency VS. parallelism •Задачи из теории и практики

    •Проблемы с OS threads & locks •MP VS. STM •Почему вдруг FP имеет значение?
  5. Concurrency is not parallelism

  6. © Rob Pike Concurrency is the composition of independently executing

    computations. Concurrency is a way to structure software...
  7. Задачи •Ограниченные ресурсы, неограниченные потребности •Теория: “Спящий парикмахер” •Практика: Cache

    manager для листинга изображений
  8. Use locks, Luke!

  9. “Решение” •проверить ресурсы на диске •lock HM, проверить загружающих, unlock

    HM •HTTP HEAD + Content-Length •lock счетчик ресурсов, вычесть размер, unlock •HTTP body сбросить на диск
  10. Да ну?

  11. Решение?? •что делать с ошибками во время загрузки изображения? •что

    делать с “ожидающими” очистки свободного места •как насчет “10 x 1mb лучше чем 1 x 10mb”?
  12. Решение?? •как “убить задачу”, если изображение уже не нужно? •что

    если нужно запустить 1000+ скачиваний одновременно? •вы уверены, что расставили locks правильно?
  13. © Jonas Boner •Locks do not compose •Locks break encapsulation

    •Taking too few/many/wrong locks •Taking locks in wrong order •Error recovery is hard
  14. Проблема •мир устроен по другому •ошибки в критической секции непоправимы

    •узнаете об ошибке в продакшине
  15. Как жить дальше?

  16. Задача Есть некий офис с сотней программистов, и доска с

    табличкой “задач сделано ...”. У каждого свои задачи. По выполнению нужно сделать +1. Как организовать работу?
  17. Подходы •Message passing (обмен сообщениями) •STM (транзационная память) •Dataflow (потоковое

    управление)
  18. Message passing Erlang, Scala, Go

  19. Actor •изолированный легкий “процесс” •нет общей памяти •обмен сообщениями через

    mailbox •“location transparency”
  20. Erlang

  21. None
  22. None
  23. STM Clojure, Haskell

  24. Память это база данных

  25. Clojure •задумана “for concurrency” •Identity VS. Value •STM - синхронные

    и координированные изменения •Agents - асинхронные и независимые •Atom - синхронное изменение
  26. Clojure

  27. None
  28. None
  29. Dataflow Oz ~ Scala, Clojure, Haskell, ...

  30. Dataflow Ваше домашнее задание :)

  31. ФП •lambda calculus •side-effects free •детерминированные вычисления •immutable значения •бесмысленность

    “присваивания”
  32. Ограничения Everything that can go wrong will go wrong ©

    Murphy
  33. Муки выбора •distribution → MP •некоординированное чтение → SMP •низкоуровневый

    код → locks
  34. Муки выбора •никакой серебрянной пули •выбирайте идеоматичный подход •выбирайте идеоматичную

    технологию •зрите в корень
  35. А также

  36. СML

  37. Go: channel •Тот же CSP •Транспортный слой •Грубая аналогия: имя

    файла VS. дескриптор файла •Еще одна: channel ≈ портабельный mailbox
  38. Scala: Akka •библиотека Akka → core •очень (!) похоже на

    Erlang •сутью actor-а является состояние •yield-механизм намного слабее
  39. А также... •Clojure core.async •CloudHaskell •Haxl •CRDT(s) •Bloom

  40. Ссылки •Эта презентация: 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/