Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Concurrency, Message Passing & STM [rus]

Concurrency, Message Passing & STM [rus]

Lecture for KPI students [russian language]

Oleksii Kachaiev

November 07, 2013
Tweet

More Decks by Oleksii Kachaiev

Other Decks in Programming

Transcript

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

    & Twitter Storm contributor •Автор библиотеки fn.py •Хобби: Haskell, Scheme, CRDT, системы типов, компиляторы
  2. О чем? •Concurrency VS. parallelism •Задачи из теории и практики

    •Проблемы с OS threads & locks •MP VS. STM •Почему вдруг FP имеет значение?
  3. © Rob Pike Concurrency is the composition of independently executing

    computations. Concurrency is a way to structure software...
  4. “Решение” •проверить ресурсы на диске •lock HM, проверить загружающих, unlock

    HM •HTTP HEAD + Content-Length •lock счетчик ресурсов, вычесть размер, unlock •HTTP body сбросить на диск
  5. Решение?? •что делать с ошибками во время загрузки изображения? •что

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

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

    •Taking too few/many/wrong locks •Taking locks in wrong order •Error recovery is hard
  8. Задача Есть некий офис с сотней программистов, и доска с

    табличкой “задач сделано ...”. У каждого свои задачи. По выполнению нужно сделать +1. Как организовать работу?
  9. Clojure •задумана “for concurrency” •Identity VS. Value •STM - синхронные

    и координированные изменения •Agents - асинхронные и независимые •Atom - синхронное изменение
  10. Go: channel •Тот же CSP •Транспортный слой •Грубая аналогия: имя

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

    Erlang •сутью actor-а является состояние •yield-механизм намного слабее