Ո՞րն է տարբերությունը Node.js- ի իրադարձությունների վրա հիմնված ճարտարապետության և այլ լեզուներով բազմաշերտ ծրագրավորման միջև:


պատասխանել 1:

Երկու իրադարձությունների վրա հիմնված և բազմաշերտ պարադիգմներում ծածկագիրը կատարվում է գործառնական համակարգի գործընթացում:

Եթե ​​գործընթացը անցնում է բազմաթիվ թելերով, ապա այդ թեմաները կիսում են գործընթացի հիշողությունը (հասցեների տարածքը) `կարդալու և գրելու համար:

JavaScript- ը, որը վարում է Node.js- ն, բնորոշ է մեկ թելերով: Յուրաքանչյուր գործառույթ երաշխավորված է, որ այն ամբողջությամբ կկատարվի, և այս գործառույթի կատարման ընթացքում ընթացիկ գործընթացում ոչ մի այլ JavaScript կոդ չի իրականացվում: Բնականաբար, ասինխրոն իրադարձությունները (ցանց, սկավառակի մուտքագրում / ելք, ժմչփ, այլ ապարատային և օպերացիոն համակարգի իրադարձություններ) մշակվում են շարժիչի կողմից, որն ավելացնում է JavaScript գործառույթները, որոնք գրանցված են որպես բեռնափոխադրողներ (կամ զանգերի զանգեր), այս իրադարձությունների համար, որպեսզի կատարվեն իրադարձությունների օղակի հերթում: նախքան հերթի ավարտը:

Բազմաշերտ պարադիգմում երկու կամ մի քանի թեմա զուգահեռ կատարում են ծածկագիր, այնպես որ ֆունկցիոնալ գործարկման ընթացքում կարող է իրականացվել կոդերի մի այլ կտոր, որը կարող է իրականացվել տարբեր պրոցեսորային առանցքի վրա ՝ հնարավոր է կարդալով կամ գրել նույն հիշողության հասցեներում: Դա կարող է հանգեցնել անհամապատասխան հիշողության վիճակի, քանի դեռ կոդն օգտագործում է հատուկ օպերացիոն համակարգի մեխանիզմներ (համաժամացման պրիմիտիվներ) `ընդհանուր հիշողությունը հասանելիությունը կառավարելու համար:



պատասխանել 2:

Սա լավ հարց է. «Ո՞րն է տարբերությունը Node.j- ի իրադարձությունների վրա հիմնված ճարտարապետության և այլ լեզուներով բազմաշերտ ծրագրավորման միջև»:

Մենք կարող ենք և պետք է դա մի փոքր իջեցնենք:

  • Հանգույցի իրադարձությունների վրա հիմնված ճարտարապետությունը

Իրադարձության վրա հիմնված ճարտարապետությունը նախատեսված չէ բացառապես հանգույցների համար, օրինակ. B. Tornado (Python), Vertx (Java), Akka (Scala), ReactiveX (բազմաթիվ լեզուներ):

  • Բազմամշակման ծրագրավորում այլ լեզուներով:

Նկատի ունեցեք, որ JavaScript- ը լռելյայնորեն չի ապահովում բազմաթիվ թելեր: Այն աջակցում է վեբ աշխատողներին, ովքեր, իմ գիտությամբ, կարող են գործել որպես թեմա:

Հետևաբար, իրադարձությունների վրա հիմնվածը ոչ միայն հանգույցների համար է մատչելի, և բազմաշերտ կազմումը կարող է իրականացվել հանգույցներում:

Այսպիսով, կարող է լինել երկու հարց. «Ո՞րն է տարբերությունը իրադարձության վրա հիմնված և բազմաշերտ ընթերցման միջև» և «Որն է տարբերությունը հանգույցի և այլ լեզուների միջև (շրջանակներ)»: Ես կենտրոնանալու եմ վերջինիս վրա, քանի որ սա կարծես թե հարցի մտադրությունն է:

Node- ի առանձնահատկությունն այն է, որ հեղինակը այն ստեղծեց `վեբ ծրագրեր կառուցելիս I / O- ն արգելափակելուց խուսափելու համար: Հոդային համայնքի մշակույթն այն է, որ շեշտը դնի և կառուցվի ոչ արգելափող I / O- ի ուժի վրա: Դուք չեք գտնի չափազանց շատ երրորդ կողմի գրադարաններ, որոնք արգելափակում են զանգերը: Որպես Node օգտագործող ծրագրավորող, դժվար թե հանդիպեք ձեր կոդի նուրբ արգելափակումներին: Այլ լեզուներով, միամիտ մշակողը կարող է պատահաբար կատարել շատ անարդյունավետ արգելափակումներ, ինչպիսիք են Բ. Շտեմարանի կապի ընթերցում:

Այսպես ասած, դուք իսկապես պետք է ավելին կարդաք բազմակի «զուգահեռականության» մոդելների մասին և հասկանաք յուրաքանչյուրի կողմնակիցներն ու դեմքերը: Բոնուսային միավորներ ՝ այն բանի համար, թե ինչու են հասկանում, թե ինչու է այդքան ժամանակ անընդմեջ անընդմեջ ընդունելի մուլտհերքումը:



պատասխանել 3:

Հայեցակարգային տարբերությունները շատ պարզ են ձեր գլուխը փաթաթելու համար:

Իրադարձությունների վրա հիմնված ճարտարապետության մեջ ձեր ծրագիրը ընթանում է շարունակական միակողմանի հանգույցով (դուք կարող եք հանգույցով մի քանի բազմաշերտ թելերով անել, բայց այս պահին այդ մասին պետք չէ անհանգստանալ): Երբ իրադարձություն է սկսվում, զանգի պահակի վրա կա աշխատանք, որը պետք է մշակվի ծրագրի ազատ ժամանակ:

Բազմամշակված ճարտարապետությունը, ընդհանուր առմամբ, նոր թեմա է հարուցում, երբ այն պետք է սպասի գործողությունների: Այսպիսով, դուք գնում եք տվյալների շտեմարան և ստեղծում նոր թել, որը կատարում է բոլոր անհրաժեշտ առաջադրանքները և ձեռնարկում է անհրաժեշտ քայլեր ՝ բնօրինակ շարանը լրացնելու կամ վերամիավորելու համար:

Երկու մեթոդներն էլ շատ օգտակար են տարբեր նպատակների համար: Իրադարձությունների վրա հիմնվածը հիանալի է օգտագործողների միջերեսների և սերվերների համար, քանի որ ձեր ծրագիրը չգիտի, թե երբ է տեղի ունենում նոր իրադարձություն, և իրադարձությունները հաճախ պատահում են ջարդոններում: Մինչ թելը անհրաժեշտ է հաշվողականորեն ինտենսիվ աշխատատեղերի համար, որտեղ ցանկանում եք խնդիրը բաժանել շատ ավելի փոքր մասերի (կամ մոտենալ ձեր մեկ թելի հանգույցի սահմանին):