Оқиғаға негізделген Node.js архитектурасы мен басқа тілдердегі көп ағынды бағдарламалаудың айырмашылығы неде?


жауап 1:

Оқиғаға негізделген және көп ағынды парадигмаларда код амалдық жүйенің процесінде орындалады.

Егер процесс бірнеше ағынмен жұмыс жасайтын болса, онда бұл ағындар оқу және жазу үшін процесс жадын (мекен-жай кеңістігін) бөліседі.

Node.js-ті басқаратын JavaScript, негізінен, бір тізбектелген. Әр функцияның толық орындалуына кепілдік беріледі және осы функцияны орындау барысында басқа ешқандай JavaScript коды орындалмайды. Табиғи асинхронды оқиғаларды (желі, дискіні енгізу / шығару, таймер, басқа аппараттық және амалдық жүйелік оқиғалар) қозғалтқыш өңдейді, ол орындалатын оқиғалар тізбегіне осы оқиғаларға өңдеушілер (немесе кері байланыс) ретінде тіркелген JavaScript функцияларын қосады. кезек аяқталғанға дейін.

Көп ағынды парадигмада екі немесе одан да көп ағындар параллель орындалады, осылайша функционалды іске қосу кезінде басқа жад адрестерінде оқу немесе жазу мүмкін болатын процессордың өзегіне кодтың басқа бөлігі орындалуы мүмкін. Егер код ортақ жадқа қол жеткізуді басқару үшін арнайы амалдық жүйенің механизмдерін (синхрондау примитивтері) пайдаланбаса, бұл жадтың сәйкес келмеуіне әкелуі мүмкін.



жауап 2:

Бұл жақсы сұрақ: «Node.j архитектурасы мен басқа тілдердегі көп ағынды бағдарламалаудың айырмашылығы неде?»

Біз мұны аздап азайта аламыз және солай етуіміз керек.

  • Түйіннің оқиғаларға негізделген сәулеті

Оқиғаға негізделген сәулет тек түйіндерге арналмаған, мысалы. B. Торнадо (Python), Vertx (Java), Акка (Скала), ReactiveX (бірнеше тілдер).

  • Басқа тілдердегі көп ағынды бағдарламалау.

Әдепкі бойынша JavaScript бірнеше ағындарды қолдамайтынын ескеріңіз. Бұл менің білуімше, жіп ретінде әрекет ете алатын веб-қызметкерлерге қолдау көрсетеді.

Оқиғаға негізделген тораптар тек түйіндер үшін ғана қол жетімді емес, ал түйіндерде көп ағынды жүргізуге болады.

Сондықтан екі сұрақ туындауы мүмкін: «Оқиғаға негізделген және көп ағынды оқшауланудың айырмашылығы неде» және «түйін мен басқа тілдердің (жақтаулардың) арасындағы айырмашылық неде?». Мен екіншісіне тоқталамын, себебі бұл сұрақтың мақсаты.

Node-дің ерекше ерекшелігі - оны веб-қосымшаларды құру кезінде енгізу-шығуды бұғаттамау үшін жасаған. Түйіндер қоғамдастығының мәдениеті - бұл блоктау емес енгізу / шығарудың күшіне баса назар аудару. Сіз қоңырауларды блоктайтын тым көп үшінші тарап кітапханаларын таба алмайсыз. Node қолданатын әзірлеуші ​​ретінде сіздің кодыңыздағы нәзік бұғаттауларға тап болуыңыз екіталай. Басқа тілдерде аңғалдық жасаушы кездейсоқ блоктау сияқты тиімсіз қоңыраулар жасай алады, мысалы B. Мәліметтер базасын қосудан оқу.

Бұл жерде сіз «параллелизм» модельдері туралы көбірек оқып, әрқайсысының жақсы және кемшіліктерін түсінуіңіз керек. Неліктен көп ағынды оқу ұзақ уақыт бойы қол жетімді екенін түсіну үшін бонустық ұпайлар.



жауап 3:

Тұжырымдамалық айырмашылықтар сіздің басыңызды орап алу өте қарапайым.

Оқиғаға негізделген архитектурада сіздің бағдарлама үздіксіз бір ағынды циклде жұмыс істейді (түйінде бірнеше ағынды жасай аласыз, бірақ дәл қазір сіз бұл туралы алаңдамайсыз). Оқиға басталған кезде, бағдарлама бос уақытында өңделетін қоңыраулар тақтасында жұмыс бар.

Көп ағынды архитектура, әдетте, әрекетті күтуге мәжбүр болған кезде жаңа ағынды қоздырады. Сонымен, сіз деректер базасына өтіп, барлық қажетті тапсырмаларды орындайтын және бастапқы ағынды толтыру немесе қайта қосу үшін қажетті қадамдарды жасайтын жаңа ағын жасайсыз.

Екі әдіс де әртүрлі мақсаттар үшін өте пайдалы. Оқиғаға негізделген пайдаланушы интерфейсі мен серверлері үшін тамаша, себебі сіздің бағдарламаңыз жаңа оқиғаның қашан пайда болатынын және оқиғалар жиі штурмдарда болатынын білмейді. Есептеуді қажет ететін есептеулер қажет болса, онда сіз мәселені әлдеқайда аз бөліктерге бөлгіңіз келеді (немесе сіздің жеке тізбегіңіздің шегіне жетіңіз).