Save 37% off PRO during our Black Friday Sale! »

Обзор возможностей многопоточности в Java [JUG.RU]

Обзор возможностей многопоточности в Java [JUG.RU]

Встретить однопоточную программу в наше время — редкость (если не смотреть на JavaScript). В этом докладе мы разберём возможности организации многопоточного кода в Java: от конструирования велосипедов и запуска потоков ручками до ForkJoinPool-ов, зеленых потоков и транзакционной памяти.
Писать корректный многопоточный код сложно, и выбор правильной модели может существенно облегчить последующие страдания программистов. Но какой подход лучше всего?

В этом докладе мы разберем простую задачку на параллельное выполнение кода и решим ее разными способами: потоками, сгруппированными потоками, актёрами, зелеными потоками, с помощью CompletableFuture и так далее. Каждый новый способ отличается по простоте написания и поддержки кода, легче масштабируется на более сложные задачи. В итоге мы выясним, что и когда лучше использовать.

5d01eb7205b787b5991db85a11ee5e68?s=128

Oleg Šelajev

August 30, 2017
Tweet

Transcript

  1. Обзор возможностей многопоточности в Java

  2. @shelajev

  3. None
  4. Safe harbour and stuff Внимание!!

  5. ЗАЧЕМ ОНО НАМ?

  6. А ВСЕ ТАКИ? https://twitter.com/reubenbond/status/662061791497744384

  7. None
  8. CONCURRENCY | PARALLELISM http://joearms.github.io/2013/04/05/concurrent-and-parallel-programming.html

  9. В ТЕОРИИ

  10. НА ПРАКТИКЕ

  11. None
  12. THREADS ORGANIZED THREADS FORK-JOIN FRAMEWORK COMPLETABLE FUTURES ACTORS FIBERS SOFTWARE

    TRANSACTIONAL MEMORY
  13. None
  14. КТО ВО ЧТО ГОРАЗД? http://zeroturnaround.com/rebellabs/flavors-of-concurrency-in-java-threads-executors-forkjoin-and-actors/

  15. None
  16. ПОТОКИ Поток это сущность способная выполнять инструкции программы и регулируемая

    “шедулером".
  17. None
  18. ЗАЧЕМ ПОТОКИ Моделируют железо Моделируют операционку User-space концепция

  19. КАК ПОТОКИ ОБЩАЮТСЯ Объекты и поля Atomic* Очереди База данных

  20. КТО РУЛИТ ОБЩЕНИЕМ? The Java Language Specification 17.4. Memory Model

  21. ЗАДАЧА

  22. ВЫВОДЫ: ПОТОКИ Тратят ресурсы Ручное управление Быстро и легко Не

    очень просто
  23. None
  24. ГРУППЫ ПОТОКОВ “thread pool“ это когда существует m потоков, что

    бы выполнить n задач.
  25. None
  26. ПОДВОДНЫЕ КАМНИ: EXECUTORS Размер очереди Стратегия переполнения Стратегия отмены

  27. ВЫВОДЫ: EXECUTORS Простота настройки Ограниченный overhead Заметает сложные вопросы под

    коврик
  28. http://i.ytimg.com/vi/6_W_xLWtNa0/maxresdefault.jpg

  29. FORK JOIN Рекурсивные задачи Общие задачи параллелизации Work stealing

  30. http://www.javaspecialists.eu/archive/Issue223.html Blocking methods should not be called from within parallel

    streams in Java 8, otherwise the shared threads in the common ForkJoinPool will become inactive. In this newsletter we look at a technique to maintain a certain liveliness in the pool, even when some threads are blocked. MANAGED BLOCKER от Dr. Heinz M. Kabutz
  31. TAKEAWAY: FORK JOIN POOL Эффективный Настроеный умными людьми Простота использования

    Есть подводные камни
  32. None
  33. Победа типов над многопоточностью java.util.concurrent.CompletableFuture thenApply(Function / Consumer / etc)

    thenApplyAsync(Function / etc)
  34. Completable Future https://vimeo.com/131394616

  35. None
  36. ACTORS "Actors" универсальный примитив многопоточных вычислений.

  37. ЧТО МОЖЕТ АКТОР? Реагировать на сообщения Породить конечное число акторов

    Ответить заказчику
  38. None
  39. ТИПИЗИРОВАННЫЕ АКТОРЫ public static interface Squarer { //fire-forget void squareDontCare(int

    i); //non-blocking send-request-reply Future<Integer> square(int i); //blocking send-request-reply Option<Integer> squareNowPlease(int i); //blocking send-request-reply int squareNow(int i); }
  40. ВЫВОДЫ: ACTORS ООП это про сообщения Multiplexing like a boss

    Supervision & Fault tolerance
  41. http://static1.squarespace.com/static/50aa813ce4b0726ad3f3fdb0/51e1e393e4b0180cf3bcbb46/51e1e39ae4b0fa94cee721f9/1373758363472/forest-by-marshmallow-laser-feast-the-tree-mag-30.jpg

  42. FIBERS Легковесные (зеленые) потоки которые контролируются отдельным “шедулером”.

  43. None
  44. QUASAR FIBERS @Suspendable public void myMethod(Input x) { x.f(); }

  45. QUASAR FIBERS new Fiber<V>() { @Override protected V run() throws

    SuspendExecution, InterruptedException { // your code } }.start();
  46. FIBERS Quasar “freezes” the fiber’s stack into a continuation task

    that can be re-schedule later on.
  47. ВЫВОДЫ: FIBERS Continuations Прогресс по всему фронту работ Модификация байткода

    программы Высокая скалируемость
  48. None
  49. ТРАНЗАКЦИОННАЯ ПАМЯТЬ

  50. STM import akka.stm.*; final Ref<Integer> ref = new Ref<Integer>(0); new

    Atomic() { public Object atomically() { return ref.set(5); } }.execute();
  51. STM final TransactionalMap<String, User> users = new TransactionalMap<String, User>(); //

    fill users map (in a transaction) new Atomic() { public Object atomically() { users.put("bill", new User("bill")); users.put("mary", new User("mary")); users.put("john", new User("john")); return null; } }.execute();
  52. ВЫВОДЫ: TX MEMORY Retry / Fail ACID

  53. THREADS ORGANIZED THREADS FORK-JOIN FRAMEWORK COMPLETABLE FUTURES ACTORS FIBERS SOFTWARE

    TRANSACTIONAL MEMORY
  54. ЧТО МЫ ИМЕЕМ?

  55. None
  56. https://twitter.com/CodeWisdom/status/834125287151501312

  57. Seven Concurrency Models in Seven Weeks: When Threads Unravel by

    Paul Butcher https://pragprog.com/book/pb7con/seven-concurrency-models-in-seven-weeks
  58. http://www.amazon.com/The-Multiprocessor-Programming-Revised-Reprint/dp/0123973376 The Art of Multiprocessor Programming by Maurice Herlihy, Nir

    Shavit
  59. oleg@zeroturnaround.com @shelajev Давайте дружить!