Changes between Initial Version and Version 1 of Actor_Model


Ignore:
Timestamp:
May 28, 2019, 10:17:45 PM (5 years ago)
Author:
andy
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • Actor_Model

    v1 v1  
     1= Паралеллизм на акторах
     2
     3Надо начать издалека, чтобы было понятно
     4
     5== Режимы I/O
     6
     7=== DOS PIO
     8
     9{{{
     10foo = read()
     11}}}
     12
     13во время `read()` наш основной поток никуда не девается, и занимается вводом-выводом сам (читает из регистров через инструкцию `IN` в цикле)
     14
     15=== DOS DMA
     16
     17{{{
     18read()
     19while (!isCompleted()) {
     20   doSomethingElse();
     21}
     22foo = getResult()
     23}}}
     24
     25Тут сам ввод происходит аппаратно, мы только запускаем его и опрашиваем факт завершения. Идея в том, что если мы не опрашиваем флаг завершения - то ввод всё равно завершается удачно. В случае DOS DMA нам надо читать постоянно, дабы не потерять байты. А тут мы можем заниматься какой-то работой, пока идет ввод-вывод, и опрашивать "редко".
     26
     27== UNIX Blocking IO
     28
     29Идея та же, что в DOS PIO:
     30
     31{{{
     32foo = read()
     33}}}
     34
     35Только теперь когда мы делаем read() мы даем команду ядру нас остановить и продолжить, когда придёт ответ. В принципе идентично `yield` из JS.
     36
     37Отличие от DOS PIO в том, что пока мы остановлены, ядро может исполнять кого-то другого.
     38
     39
     40== UNIX nonblocking IO
     41
     42{{{
     43read()
     44while (!isCompleted()) {
     45   doSomethingElse();
     46}
     47foo = getResult()
     48}}}
     49
     50Те же яйца что в случае DOS DMA. Только теперь аппаратный ввод не обязателен а им может заниматься ядро в соседнем потоке.
     51
     52