Top Banner
C++ CoreHard Autumn 2017 Actors for fun and profit Евгений Охотников
46

Actors for fun and profit

Jan 22, 2018

Download

Technology

corehard_by
Welcome message from author
This document is posted to help you gain knowledge. Please leave a comment to let me know what you think about it! Share it to your friends and learn new things together.
Transcript
Page 1: Actors for fun and profit

C++ CoreHard Autumn 2017

Actors for fun and profit

Евгений Охотников

Page 2: Actors for fun and profit

Предистория

C++ CoreHard Autumn 2016:Модель акторов и C++: что, зачем и как?

C++ CoreHard Winter 2017:Шишки, набитые за 15 лет использования акторов в C++.

2

Page 3: Actors for fun and profit

Модель Акторов и С++:миф или реальность?

3

Page 4: Actors for fun and profit

Реальность!● промышленная автоматизация (АСУ ТП);● телеком;● электронная и мобильная коммерция;● имитационное моделирование;● САПР;● игростроение;● ПО промежуточного слоя (СУБД, ...)● ...

4

Page 5: Actors for fun and profit

Есть готовые инструменты:Наиболее известные:● QP/C++ (двойная лицензия);● Just::Thread Pro: Actors Edition (коммерческая лицензия);● С++ Actor Framework (BSD-3-Clause лицензия);● SObjectizer (BSD-3-Clause лицензия);

Кроме того:● OOSMOS (двойная лицензия, язык C, но может использоваться и в C++);● Asyncronous Agents Library (входит в Visual Studio);

5

Page 6: Actors for fun and profit

Вопрос на миллион:

А нужна ли вообще Модель Акторов?

6

Page 7: Actors for fun and profit

Нужен ли самосвал на трассе Формулы-1?

7

Page 8: Actors for fun and profit

Архиважное уточнение:

Для чего?

8

Page 9: Actors for fun and profit

Однако!

"Эксперименты новичков должны проводиться в лабораториях для новичков"

9

Из книги "Вы, конечно, шутите, мистер Фейман!"

Page 11: Actors for fun and profit

Модель Акторов как......способ смотреть на мир. Другими словами: если у вас в руках молоток...

11

Page 12: Actors for fun and profit

Основные принципы Модели Акторов

● актор – это некая сущность, обладающая поведением;● акторы реагируют на входящие сообщения;● получив сообщение актор может:

○ отослать некоторое количество сообщений другим акторам;○ создать некоторое количество новых акторов;○ определить для себя новое поведение для обработки последующих

сообщений.

12

Page 13: Actors for fun and profit

Молоток и гвозди ‒ это понятно, но......далеко не всегда они в принципе нужны.

Яркий пример: расчетные задачи из вычислительной математики.

13

Page 14: Actors for fun and profit

Лакмусовые бумажкиЕсть несколько маркеров, которые могут подсказать, что выбор Модели Акторов будет оправданным.

Могут подсказать. А могут и не подсказать.

14

Page 15: Actors for fun and profit

Маркер №1

Fire-and-Forget

15

Page 16: Actors for fun and profit

Fire-and-Forget1. Тотальный контроль не нужен.2. Результаты начатых операций вот прямо здесь и сейчас не нужны.3. Если что-то не случилось, то ничего страшного.

Мы постоянно используем этот принцип в повседневной жизни

16

Page 17: Actors for fun and profit

Fire-and-Forget: примеры "за" и "против"Пример №1: две рабочие нити, одна только читает данные, вторая только разбирает их.

Пример №2: коммит в БД.

17

Page 18: Actors for fun and profit

Fire-and-Forget. Резюме.Если fire-and-forget для вашей задачи естественен и повсеместен, то в сторону Модели Акторов можно смотреть.

Если же превалируют блокирующие синхронные операции, то с применением Модели Акторов могут быть сложности.

18

Page 19: Actors for fun and profit

Маркер №2

Конечные автоматы

19

Page 20: Actors for fun and profit

Принципы Модели Акторов еще раз

● актор – это некая сущность, обладающая поведением;● акторы реагируют на входящие сообщения;● получив сообщение актор может:

○ отослать некоторое количество сообщений другим акторам;○ создать некоторое количество новых акторов;○ определить для себя новое поведение для обработки

последующих сообщений.

20

Page 21: Actors for fun and profit

Конечные автоматы

Не все йогурты конечные автоматыодинаково полезны

21

Page 22: Actors for fun and profit

Пример: вход в он-лайн кинотеатр

22

Page 23: Actors for fun and profit

Простой синхронный код лучше

23

auto process_login(const login_params & params) -> start_page_data{ const auto auth_result = request_auth_service(params); if(auth_result.valid_user()) { const auto balance = request_balance(auth_result.user_token()); const auto pending_messages = request_pending_messages(auth_result.user_token()); return make_start_page_data(auth_result, balance, pending_messages); } else return make_unknown_user_page_data();}

Обычные потоки (или сопрограммы) + CSP или task based parallelism.

Page 24: Actors for fun and profit

Конечные автоматы

Есть и полезные конечные автоматы

24

Page 25: Actors for fun and profit

Полезные конечные автоматы (1)

25

Page 26: Actors for fun and profit

Полезные конечные автоматы (2)

26

Page 27: Actors for fun and profit

Полезные конечные автоматы (3)

27

Продвинутые возможности конечных автоматов:

● реакция на вход/выход в/из состояния;● иерархия состояний (вложенные состояния, наследование событий);● история для состояний;● ограничения на время пребывания в состоянии.

Page 28: Actors for fun and profit

Для тех, кто хочет приобщиться:

28

David Harel

Statecharts: A Visual Formalism For Complex Systems(1987)

Page 29: Actors for fun and profit

Конечные автоматы. Резюме.

29

Если ваша предметная область кишит конечными автоматами, то Модель Акторов может вам помочь.

Page 30: Actors for fun and profit

Маркер №3

Архитектура Shared Nothing

30

Page 31: Actors for fun and profit

Shared Nothing: контрольный в головуМогут ли сущности в программе работать без каких либо разделяемых данных?

Может ли каждая сущность быть представлена в виде отдельного процесса?

Это таки экстремизм.Но он отрезвляет.

31

Page 32: Actors for fun and profit

Очевидно, что...

...архитектура Shared Nothing не всегда применима

32

Page 33: Actors for fun and profit

Кроме того...

...все зависит от высоты, с которой мы смотрим вниз

(уровень абстракции имеет значение)

33

Page 34: Actors for fun and profit

Shared Nothing. Резюме.Если использование архитектуры Shared Nothing затруднительно и/или ведет к дополнительным накладным расходам, то в сторону Модели Акторов можно не смотреть.

Но вообще Shared Nothing ‒ это отличная вещь. Очень сильно упрощает жизнь. Особенно в многопоточном программировании.

Модель Акторов способствует внедрению архитектуры Shared Nothing.

34

Page 35: Actors for fun and profit

Не маркер, но тем не менее

Таймеры

35

Page 36: Actors for fun and profit

Напрямую не связано с Моделью Акторов, но......таймеры в виде отложенных сообщений ‒ это очень удобно на практике.

Следствие того, что акторы общаются с внешним миром только посредством сообщений.

Таймеры активно используются акторами из-за принципа Fire-and-Forget.

36

Page 37: Actors for fun and profit

Пример: ожидание с ограничением по времениНужно накапливать запросы до тех пор, пока:

● поступит 100 штук (обрабатываем 100 запросов разом) или● истечет тайм-аут в 250ms (обрабатываем сколько пришло).

37

Page 38: Actors for fun and profit

Пример: ожидание с ограничением по времениclass bunch_processor { ...public: void on_request(request & req) { requests_.push_back(move(req)); if(1 == requests_.size()) timeout_timer_ = send_delayed<timeout>(this, 250ms); else if(100 == requests_.size()) { timeout_timer_.reset(); handle_collected_requests(); } } void on_timer(timeout&) { handle_collected_requests(); } ...};

38

Page 39: Actors for fun and profit

Таймеры. Резюме.Если у вас много таймеров и с ними нужно активно работать, то Модель Акторов может упростить вашу работу.

39

Page 40: Actors for fun and profit

Хватит сферических коней в вакууме!

Где это применяется?

40

Page 41: Actors for fun and profit

Где это применяется?

Управление оборудованием

41

Page 42: Actors for fun and profit

Где это применяется?

Имитационное моделирование

42

Page 43: Actors for fun and profit

Где это применяется?

Тестовые стенды

43

Page 44: Actors for fun and profit

Где это применяется?

Конвейерная обработка данных/транзакций

44

Page 45: Actors for fun and profit

Ваш К.О.1. Здравый смысл никто не заменит, здравый смысл незаменим!2. Модель Акторов не является серебряной пулей.3. В ряде случаев Модель Акторов упрощает жизнь.4. Но нужно уметь ее использовать.5. Учиться лучше "на кошках".6. Есть готовые инструменты, которые позволяют учиться без

велосипедостроения.

45

Page 46: Actors for fun and profit

Хочешь акторов? Спроси меня как!Абсолютно бесплатно и без SMS ;)

Все подробности здесь: http://eao197.blogspot.com/2017/03/progactors.html

46