Заснований на події == асинхронний?

Чи "подія заснована" таке ж, як "асинхронне"?

4

3 Відповіді

Ні, це не означає, що події асинхронні.

У події, керованої однопоточною системою, ви можете запускати події, але всі вони обробляються послідовно. Вони можуть поступати як частину їх обробки, але нічого не відбувається одночасно , якщо вони поступаються, вони перестають обробляти і повинні зачекати до того, як вони знову з'єднаються, щоб знову розпочати обробку.

Прикладами цього є Swing (Java), Twisted (Python), Node.js (JavaScript), EventMachine (Ruby)

Всі ці приклади є циклічними повідомленнями на основі подій, але всі вони є єдиними, всі події заблокують всі наступні події в тій самій потоці.

У програмуванні асинхронні події є тими, що відбуваються незалежно від потоку основної програми. Асинхронні дії - це дії, виконані в неблокуючій схемі, що дозволяє потоку основної програми продовжувати обробку.

So just because something is event driven doesn't make it asynchronous, and just because something is asynchronous doesn't make it event driven either; much less concurrent.

9
додано
@nickb з первинної сторінки Node.js "Вузол подібний за дизайном та під впливом систем, таких як Ruby's Event Machine або Python's Twisted". і "Але що стосується багатопроцесорної паралельності? Чи не потрібні нитки для масштабування програм для багатоядерних комп'ютерів? Ви можете запускати нові процеси через child_process.fork() ці інші процеси будуть заплановані паралельно".
додано Автор feeling unwelcome, джерело
Я думав, що Node.js насправді асинхронний.
додано Автор nickb, джерело

Вони по суті є ортогональними поняттями.

" заснований на події " по суті означає, що код, пов'язаний з певними викликами функції, зв'язується під час виконання (і може змінюватися через виконання). Хто "запускає" події, не знає, що з ним впорається, і хто керує подією визначається для відповіді на події через асоціацію, визначену під час виконання програми. Як правило, функціональні покажчики, посилання або покажчики на об'єкт, що перевозять віртуальні методи тощо)

" асинхронний " означає, що поточний потік програми не повинен чекати виконання виклику, перш ніж продовжувати (в основному реалізовано за допомогою виклику, який повертається відразу після делегування виконання на інший потік або процес)

Не всі асинхронні події (думайте про Windows SendMessage , щодо PostMessage ), і не всі асинхронні виклики необхідні для реалізації за допомогою "подій" (хоча використання події механізм досить поширений для реалізації асинхронних викликів)

3
додано

Одне значення асинхронного полягає в тому, що в точці, де ви виділяєте обчислення, ви не чекаєте відповіді, але ви отримаєте відповідь пізніше. Відповідь набуває ортогональний для вас нормальний контроль потоку.

Один із способів відповіді полягає у використанні подій: вони відбуваються спонтанно в цьому випадку, без вашого коду ініціюють їх. У обробнику ви можете обробити результат.

Враховуючи, що обчислення та відповідь пов'язані точкою потоку керування в синхронному режимі, ви повинні зробити це самостійно в асинхронному режимі. Наприклад, використовуючи порядковий номер або щось інше.

0
додано