У чым розніца паміж архітэктурай Node.js і шматхуткавым праграмаваннем на іншых мовах?


адказ 1:

У парадыгмах, абумоўленых падзеямі, і шматструменных, код выконваецца ў працэсе аперацыйнай сістэмы.

Калі ў працэсе працуе некалькі патокаў, гэтыя тэмы падзяляюць памяць працэсу (адрасная прастора) для чытання і запісу.

JavaScript, які кіруе Node.js, па сутнасці, з'яўляецца аднаточным. Гарантавана, што кожная функцыя будзе выканана ў поўным аб'ёме, і падчас выканання гэтай функцыі не выконваецца іншы код JavaScript. Натуральна, асінхронныя падзеі (сетка, дыск уводу / вываду, таймер, іншыя апаратныя і аперацыйныя сістэмы) апрацоўваюцца рухавіком, які дадае функцыі JavaScript, зарэгістраваныя як апрацоўшчыкі (або зваротныя звароты) для гэтых падзей, у чаргу, якая будзе выконвацца. да таго, як чарга будзе скончана.

У шматпаточнай парадыгме дзве ці больш тэмы паралельна выконваюць код, так што падчас функцыянальнага запуску іншы фрагмент кода таксама можа быць выкананы ў іншым ядры працэсара, магчыма, пры чытанні альбо запісе на адны і тыя ж адрасы памяці. Гэта можа прывесці да супярэчлівага стану памяці, калі код не выкарыстоўвае спецыяльныя механізмы аперацыйнай сістэмы (прымітывы сінхранізацыі) для кіравання доступам да агульнай памяці.



адказ 2:

Гэта добрае пытанне: "У чым розніца паміж архітэктурай, заснаванай на падзеі Node.j, і шматструменным праграмаваннем на іншых мовах?"

Мы можам і павінны гэта крыху скараціць.

  • Кіраваная падзеямі архітэктура вузла

Архітэктура, заснаваная на падзеях, не прызначана выключна для вузлоў, напрыклад. B. Tornado (Python), Vertx (Java), Akka (Scala), ReactiveX (некалькі моў).

  • Праграмуванне шматструменна на іншых мовах.

Звярніце ўвагу, што па змаўчанні JavaScript не падтрымлівае некалькі тэм. Гэта падтрымлівае работнікаў Інтэрнэту, якія, наколькі я ведаю, могуць выступаць у якасці тэмы.

Такім чынам, стымулюемы падзеямі даступны не толькі для вузлоў, а шматструменнасць можа быць выканана ў вузлах.

Такім чынам, можа паўстаць два пытанні: "У чым розніца паміж падзеі і шматструменнасці" і "У чым розніца паміж вузлом і іншымі мовамі (рамкамі)". Я спынюся на апошнім, бо гэта, мабыць, з'яўляецца пытаннем.

Асаблівасць Node заключаецца ў тым, што аўтар стварыў яго, каб пазбегнуць блакавання ўводу / выводу пры стварэнні вэб-прыкладанняў. Культура супольнасці вузлоў павінна падкрэсліваць і абапірацца на сілу, якая не блакуе ўводу / выснову. Вы не знойдзеце занадта шмат старонніх бібліятэк, якія блакуюць званкі. Як распрацоўшчык, які выкарыстоўвае Node, вы наўрад ці сутыкнецеся з тонкімі блакаваннямі ў кодзе. На іншых мовах, наіўны распрацоўшчык можа выпадкова рабіць вельмі неэфектыўныя блакіроўкі выклікаў, напрыклад B. Чытанне з падлучэння да базы дадзеных.

Калі казаць, вы павінны прачытаць больш пра некалькі мадэляў "паралелізму" і зразумець плюсы і мінусы кожнай. Бонусныя балы за прызнанне таго, чаму шматпаточная чытанне прымаецца так доўга.



адказ 3:

Канцэптуальныя адрозненні даволі проста абгарнуць галаву.

У архітэктуры, заснаванай на падзеях, ваша праграма працуе ў бесперапынным аднапоточным цыкле (вы можаце зрабіць некалькі шнурочных развязвання ў вузле, але вам не трэба пра гэта хвалявацца на дадзены момант). Пры запуску падзеі ў стэку выклікаў ёсць заданне, якое павінна быць апрацавана ў вольны час праграмы.

Шматструнная архітэктура звычайна запускае новую тэму, калі ёй даводзіцца чакаць дзеяння. Такім чынам, вы заходзіце ў базу дадзеных і ствараеце новы паток, які выконвае ўсе неабходныя задачы і прадпрымае неабходныя крокі для завяршэння або вяртання зыходнай тэмы.

Абодва метаду вельмі карысныя для розных мэтаў. Кіраваны падзеямі выдатна падыходзіць для карыстацкіх інтэрфейсаў і сервераў, паколькі ваша праграма не ведае, калі адбываецца новая падзея і часта бывае ў рывок. У той час як разьба патрабуецца для вылічальна інтэнсіўных заданняў, дзе вы хочаце падзяліць праблему на значна меншыя часткі (альбо наблізіцца да ліміту вашай адной пятлі).