Яка різниця між керованою подією архітектурою та багатопотоковим програмуванням іншими мовами?


Відповідь 1:

І в керованій подіями, і в багатопотоковій парадигмі код працює всередині процесу операційної системи.

Коли процес виконує декілька потоків, ці потоки поділяють пам'ять процесу (адресний простір) і для читання, і для запису.

JavaScript, що забезпечує Node.js, є однопоточним дизайном. Кожна функція гарантовано працює до завершення, і жоден інший код JavaScript в поточному процесі не буде виконуватися під час виконання цієї функції. Природно-асинхронні події (мережа, введення-виведення диска, таймери, інші апаратні та операційні системи) обробляються двигуном, який додає функції JavaScript, зареєстровані як обробники (або зворотні виклики) для цих подій, до черги циклу подій, яку слід виконати після функції перед чергою закінчено.

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



Відповідь 2:

Це гарне запитання: "Яка різниця між керованою подіями архітектурою Node.js і багатопотоковим програмуванням іншими мовами?".

Ми можемо і повинні трохи розбити це.

  • Вузольна архітектура, керована подіями

Архітектура, керована подіями, не є винятковою для Node, наприклад, Tornado (Python), Vertx (Java), Akka (Scala), ReactiveX (кілька мов).

  • Багатопотокове програмування іншими мовами.

Зауважте, що JavaScript, за задумом, не підтримує декілька потоків. Хоча він підтримує веб-працівників, які, наскільки я знаю, можуть функціонувати як нитки.

Таким чином, керований подіями не є унікальним для Node, і багатопотокова передача може бути виконана в Node.

Тож тут можуть виникнути два запитання: "Яка різниця між керованою подією та багатопотоком" та "Яка різниця між Вузлом та іншими мовами (рамками)". Я зупинюсь на останньому, оскільки це, мабуть, є питанням.

Я б сказав, що Node особливою є те, що автор створив її з метою уникнути блокування IO під час створення веб-додатків. Культура спільноти Вузла полягає в тому, щоб підкреслити та розвинути силу, що не блокує IO. Ви не збираєтеся знаходити занадто багато бібліотек третьої сторони, які здійснюють блокування дзвінків. Як розробник, який використовує Node, ви навряд чи зможете зіткнутися з тонкими операціями блокування вашого коду. В той час, як іншими мовами, наївний розробник може випадково здійснити вкрай неефективне блокування дзвінків, як-от зчитування з підключення до бази даних.

Крім цього, вам слід почитати про декілька моделей для «одночасності» та зрозуміти плюси та мінуси кожної з них. Бонусні бали за оцінку того, чому багаторядка була прийнятною протягом такого тривалого часу.



Відповідь 3:

концептуальні відмінності досить легко обернути головою.

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

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

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