Која је разлика између Ноде.јс-ове архитектуре засноване на догађајима и програма с више навоја на другим језицима?


Одговор 1:

И у догађајима и вишечланој парадигми код се покреће унутар процеса оперативног система.

Кад процес покреће више нити, ове нити дијеле процесну меморију (адресни простор) и за читање и за писање.

ЈаваСцрипт који покреће Ноде.јс је једносметан по дизајну. Свака функција је загарантована да се покрене до краја и ниједан други ЈаваСцрипт код у тренутном процесу неће се покренути током извођења функције. Природно асинхрони догађаји (мрежа, улаз-излаз диска, тајмери, остали хардверски и оперативни систем) мотор управља машином која додаје ЈаваСцрипт функције регистроване као руковатељи (или повратне позиве) за ове догађаје у реду петље догађаја који ће се извршити након функције испред реда су завршене.

У парадигми с више навоја два или више нити паралелно покрећу код, тако да се током извођења функције различит комад кода може изводити и на различитој језгри процесора, евентуално читању или писању на исте меморијске адресе. Ово може резултирати недоследним стањем меморије, осим ако код не користи посебне механизме оперативног система (примитивни синхронизам) за управљање приступом дељеној меморији.



Одговор 2:

Ово је добро питање, "Која је разлика између Ноде.јс-ове архитектуре засноване на догађајима и програма с више навоја на другим језицима?".

То можемо и требамо мало разбити.

  • Нодеова архитектура заснована на догађајима

Архитектура вођена догађајима није искључива за Ноде, нпр. Торнадо (Питхон), Вертк (Јава), Акка (Сцала), РеацтивеКс (више језика).

  • Вишенаменски програмирање на другим језицима.

Имајте на уму да ЈаваСцрипт по дизајну не подржава више нити. Иако подржава мрежне раднике, који, колико знам, могу функционирати као нити.

Дакле, вођени догађајима нису јединствени за чвор и мулти-навојем се може радити у чвору.

Овде могу постојати два питања: „Која је разлика између догађаја усмереног према вишеструком навоју“ и „Која је разлика између чвора и других језика (оквира)“. Ја ћу се фокусирати на ово друго јер је, чини се, намера питања.

Рекао бих да је оно што Ноде чини посебним то што га је аутор створио у сврху избегавања блокирања ИО-а при изради веб апликација. Култура заједнице чворова треба да буде наглашена и изграђена на снази не-блокирајућег ИО-а. Нећете наћи превише трећих библиотека које извршавају блокирање позива. Као програмер који користи Ноде, вероватно нећете наићи на суптилне блокаде у вашем коду. Док на другим језицима, наивни програмер може случајно извршити веома неефикасне блокаде позива попут читања из везе са базом података.

Осим тога, требали бисте заиста прочитати о више модела за „истовременост“ и разумјети предности и недостатке сваког од њих. Бонус поени за уважавање зашто је вишеструко навојење прихватљиво тако дуго времена.



Одговор 3:

концептуалне разлике су прилично једноставне за омотавање главе.

У архитектури заснованој на догађајима ваш програм се покреће у континуираној петљи са једним навојем (можете направити неколико вишеслојних навоја у чвору, али не брините о томе тренутно). Када се неки догађај покрене, посао је на стацку позива који треба да се бави у слободно време програма.

Мулти-нитна архитектура генерално отпрема нову нит када мора да чека акцију. Дакле, упућујете позив бази података и вртате нову нит која ће извршити све потребне ствари и урадити све што је потребно да закључите или придружите оригиналну нит.

Обе ове методе су веома корисне за различите ствари. Догађаји су одлични за корисничко сучеље и сервере, јер ваш програм не зна када ће се догодити ново, а догађаји често настају. Премда је навојење неопходно за рачунски тешке послове где желите разбити проблем на много мање комаде (или се приближавате ограничењу своје једноструке петље).