Changes between Version 1 and Version 2 of Actor_Model


Ignore:
Timestamp:
May 28, 2019, 11:06:28 PM (5 years ago)
Author:
andy
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Actor_Model

    v1 v2  
    44
    55== Режимы I/O
     6
     7=== Нода
     8
     9- вычисления блокируют всех остальных
     10- IO через async/await
     11- блокирующий IO и долгие вычисления - моветон
     12
     13=== C#
     14
     15- вычисления блокируют только наш поток
     16- IO через async-await (выглядит как блокирующий, но надо не забывать расставлять async-await)
     17- блокирующий IO моветон, долгие вычисления - полумоветон (достаточно не запускать слишком много потоков с долгими вычислениями или запускать их в явных потоках)
     18
     19=== Akka
     20
     21- вычисления блокируют только наш поток
     22- IO через сообщения (выглядит как блокирующий)
     23- настоящий блокирующий IO моветон, долгие вычисления - полумоветон
     24
     25== "Внутри" и "снаружи"
     26
     27== Нода
     28
     29Снаружи
     30* пул
     31* мультиплексор
     32
     33Внутри
     34
     35* вычисления
     36* async-await (везде, где есть async-await, также есть коллбеки и промисы)
     37
     38== C#
     39
     40Cнаружи
     41* явные потоки
     42* пул
     43* мультиплексор
     44Внутри
     45* явные потоки (если очень надо)
     46* пул (если надо)
     47* async-await
     48
     49== Akka
     50
     51Снаружи:
     52* явные потоки
     53* пул
     54* мультиплексор
     55* async-await
     56
     57Внутри:
     58
     59* вычисления
     60* отправка сообщений
     61
     62
     63== Структура базового варианта приложения на Akka
     64
     65К сожалению, нет библиотек, рассчитанных на акку. То есть нам понадобится IO-библиотека, оборачивающая весь IO в акторы. Благо, в коллекторе IO немного - HTTP и веб-сокеты. Зато мы получаем очень ясный код для каждой биржи, а все неясности будут вынесены в наши модули:
     66
     67* akka.http
     68* akka.gearman
     69* akka.websocket
     70
     71Эти модули мы можем заопенсорсить и зарелизить в !NuGet.
     72
     73Таким образом, коллектор состоит из
     74
     75* "библиотечной" части, использующей "наружные" примитивы:
     76  * явные потоки
     77  * пул
     78  * async-await
     79* собственно кода бирж, содержащего только "внутренние" примитивы:
     80  * вычисления
     81  * синхронные вызовы
     82
     83== Отказоустойчивость
     84
     85После реализации базовых функций необходимо реализовать средства повышения отказоустойчивости. Для этого будет реализован компонент на супервизорном API акки, занимающийся пуском-остановкой-сохранением состояния акторов коллектора.
     86
     87{{{#!comment
     88
     89=== Нода
     90
     91- 1 поток
     92- долгие вычисления надо разбивать на куски, чтобы не блокировать единственный поток
     93- IO через мультиплексор:
     94  - коллбеки
     95  - промисы
     96  - async-await
     97- блокирующий IO на крайняк
     98
     99== C#
     100
     101- от 2 до 10 потоков на ядро ("пул")
     102- длинные вычисления надо запускать в небольшом количестве инстансов, чтобы не блокировать пул
     103- IO через мультиплексор:
     104  - async-await
     105  -
     106
     107
     108
    6109
    7110=== DOS PIO
     
    50153Те же яйца что в случае DOS DMA. Только теперь аппаратный ввод не обязателен а им может заниматься ядро в соседнем потоке.
    51154
     155}}}
    52156