(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': data().getTime(),įvykis:'gtm.js'});var f=d.getElementsByTagName(s)[0], j=d.createElement(s),dl=l!='dataLayer'?'&l='+l:'';j.async=true;j.src= 'https://www.googletagmanager.com/gtm.js?id='+i+dl;f.parentNode.insertBefore(j,f); })(window,document,'script','dataLayer','GTM-5LHNRP9'); MAMA! Jis vėl užblokavo siūlus! - The Codest
The Codest
  • Apie mus
  • Paslaugos
    • Programinės įrangos kūrimas
      • Priekinės dalies kūrimas
      • Galinės dalies kūrimas
    • Staff Augmentation
      • Priekinės dalies kūrėjai
      • Atgalinės versijos kūrėjai
      • Duomenų inžinieriai
      • Debesų inžinieriai
      • QA inžinieriai
      • Kita
    • Patariamoji tarnyba
      • Auditas ir konsultacijos
  • Pramonės šakos
    • Fintech ir bankininkystė
    • E-commerce
    • Adtech
    • Sveikatos technologijos
    • Gamyba
    • Logistika
    • Automobiliai
    • IOT
  • Vertė už
    • CEO
    • CTO
    • Pristatymo vadybininkas
  • Mūsų komanda
  • Case Studies
  • Sužinokite, kaip
    • Tinklaraštis
    • Susitikimai
    • Interneto seminarai
    • Ištekliai
Karjera Susisiekite su mumis
  • Apie mus
  • Paslaugos
    • Programinės įrangos kūrimas
      • Priekinės dalies kūrimas
      • Galinės dalies kūrimas
    • Staff Augmentation
      • Priekinės dalies kūrėjai
      • Atgalinės versijos kūrėjai
      • Duomenų inžinieriai
      • Debesų inžinieriai
      • QA inžinieriai
      • Kita
    • Patariamoji tarnyba
      • Auditas ir konsultacijos
  • Vertė už
    • CEO
    • CTO
    • Pristatymo vadybininkas
  • Mūsų komanda
  • Case Studies
  • Sužinokite, kaip
    • Tinklaraštis
    • Susitikimai
    • Interneto seminarai
    • Ištekliai
Karjera Susisiekite su mumis
Atgal rodyklė GRĮŽTI ATGAL
2019-04-24
Programinės įrangos kūrimas

MAMA! Jis vėl užblokavo siūlus!

The Codest

Pawel Rybczynski

Software Engineer

“Don`t block the event loop...” - tikriausiai ne kartą girdėjote šį sakinį... Nesistebiu, nes tai viena svarbiausių prielaidų dirbant su “Node”. Tačiau yra ir antras "daiktas", kurio turėtumėte neblokuoti, - tai darbininkų rezervuaras (Worker Pool). Jei jis bus apleistas, tai gali turėti didelės įtakos taikomosios programos našumui ir net jos saugumui.

Siūlai

Pagrindinis dalykas, kurį reikia atsiminti: yra dviejų tipų gijos Node.js: Pagrindinis siūlas - kurį tvarko Įvykių ciklas, ir Darbuotojų rezervas (gijų fondas) - tai yra gijų fondas -
ačiū libuv. Kiekvienas iš jų dirba skirtingą darbą. Pirmojo tikslas - atlikti neblokuojančias įvesties ir išvesties operacijas, o antrojo - atlikti procesoriui imlų darbą ir blokuojančias įvesties ir išvesties operacijas.

libuv schema

Tačiau kas yra gija ir kuo ji skiriasi nuo proceso? Yra keletas skirtumų, tačiau svarbiausias iš jų mus yra tai, kaip jiems paskirstoma atmintis. Apie procesą galima galvoti kaip apie programą. Kiekvieno proceso viduje yra tik šiam procesui skirta atminties dalis. Taigi, vienas procesas neturi prieigos prie kito proceso atminties, ir ši savybė užtikrina didelį saugumą. Norėdami užmegzti tarpusavio ryšį, turime atlikti tam tikrą darbą. Gijos yra skirtingos. Gijos veikia proceso viduje ir dalijasi ta pačia atmintimi, todėl nėra jokių problemų, kai gijos dalijasi duomenys.

Tačiau kyla viena problema. Ji vadinama lenktynių sąlyga. Srautai gali būti paleisti tuo pačiu metu, tad kaip žinoti, kuris baigsis pirmas? Gali atsitikti taip, kad pirmą kartą paleidus, pirmoji operacija baigsis pirma, o kitą kartą gali paaiškėti priešingai ir antroji operacija baigsis anksčiau už pirmąją. Įsivaizduokite, kad tokiomis sąlygomis dirbate su įrašymo ir skaitymo operacijomis! Košmaras! Kartais labai sunku parašyti teisingą kodas kelių gijų aplinkoje.

Be to, daugiasluoksnės kalbos turi daug atminties sąnaudų, nes kiekvienai užklausai sukuria atskirą giją; taigi, jei norite iškviesti 1000 užklausų, jos sukuria 1000 gijų.

Kaip spręsti tokią problemą? Vietoj to naudokite vieną siūlą! Būtent tai Mazgas jums siūlo.

vienos gijos įvykių ciklas

Kaip JavaScript kūrėjas Kviečiu žiūrėti filmas
kurioje Bartas Belderis aiškiai paaiškina įvykių kilpos koncepciją. Pateikta schema paimta iš jo pranešimo. O jei šių sąvokų visai nežinote, tiek Mazgas ir Libuv turi puikius dokumentus 🙂

Apie blokavimą

Svetainėje JavaScript plėtra pramonė jie sako, kad dėl to, kad Mazgas yra viengubas ir neblokuojamas, todėl su tais pačiais ištekliais galima pasiekti didesnį lygiagretumą nei naudojant daugiagubus sprendimus. Tai tiesa, tačiau tai nėra taip gražu ir paprasta, kaip gali atrodyti.

Nuo Node.js yra vienos gijos (JS dalis), procesoriui imlios užduotys blokuos visas vykdomas užklausas, kol konkreti užduotis bus baigta. Taigi, tiesa, kad Node.js galite blokuoti kiekvieną užklausą tik todėl, kad vienoje iš jų buvo blokuojanti instrukcija. Blokuojantis kodas reiškia, kad užtrunka ilgiau nei kelias milisekundes. Tačiau nepainiokite ilgo atsako laiko su blokavimu. Atsakymas iš duomenų bazės gali užtrukti labai ilgai, tačiau jis neužblokuoja jūsų proceso (paraiškos).

Blokuojantys metodai vykdomi sinchroniškai, o neblokuojantys - asinchroniškai.

Kaip galite sulėtinti (arba užblokuoti) įvykių ciklą?

  • pažeidžiama regex - pažeidžiama reguliarioji išraiška yra tokia, kurią reguliariosios išraiškos variklis gali užtrukti eksponentiškai ilgai; apie tai galite paskaityti daugiau. čia,
  • JSON operacijos su dideliais objektais,
  • naudojant sinchronines API iš Mazgas vietoj asinchroninių versijų; visi Node.js standartinės bibliotekos I/O metodai taip pat turi asinchronines versijas,
  • kitos programavimo klaidos, pavyzdžiui, sinchroninės begalinės kilpos.

Tokiu atveju, kadangi "Worker Pool" naudoja gijų fondą, ar galima jas taip pat blokuoti? Deja, taip 🙁 Mazgas grindžiamas filosofija viena gija daugeliui klientų. Tarkime, kad konkretaus darbuotojo atliekama užduotis yra labai sudėtinga ir jai atlikti reikia daugiau laiko. Dėl to "Worker" yra užblokuotas ir negali būti naudojamas kitoms laukiančioms užduotims vykdyti, kol nebus įvykdyti jo nurodymai. Kaip tikriausiai jau spėjote, tai gali turėti įtakos našumui. Tokių problemų galite išvengti sumažindami Užduočių laiko skirtumus, naudodami Užduočių suskirstymą.

Išvada

Be abejo, venkite blokavimo. Jei tik galite, visada rinkitės asinchronines standartinės bibliotekos API versijas. Priešingu atveju, paleidus jūsų programą, klientas gali susidurti su keliomis problemomis, pradedant sumažėjusiu pralaidumu ir baigiant visišku pasitraukimu, kuris vartotojo požiūriu yra pražūtingas.

Skaityti daugiau:

Kodėl turėtumėte (tikriausiai) naudoti Typescript

Kaip nesunaikinti projekto dėl blogos kodavimo praktikos?

Duomenų gavimo strategijos "NextJS

Susiję straipsniai

Išmaniojo telefono sveikatos priežiūros programėlės su širdies piktograma ir kylančia sveikatos diagrama, pažymėtos The Codest logotipu, iliustracija, vaizduojanti skaitmeninės sveikatos ir sveikatos technologijų sprendimus.
Programinės įrangos kūrimas

Sveikatos priežiūros programinė įranga: Sveikatos priežiūros paslaugos: tipai, naudojimo atvejai

Įrankiai, kuriais šiandien naudojasi sveikatos priežiūros organizacijos, nė iš tolo neprimena prieš kelis dešimtmečius naudotų popierinių kortelių. sveikatos priežiūros programinė įranga dabar padeda sveikatos sistemoms, pacientų priežiūrai ir šiuolaikiniam sveikatos priežiūros paslaugų teikimui klinikinėse ir...

GERIAUSIAS
Abstrakti mažėjančios stulpelinės diagramos su kylančia rodykle ir auksine moneta, simbolizuojančia ekonomiškumą arba taupymą, iliustracija. Viršutiniame kairiajame viršutiniame kampe pavaizduotas The Codest logotipas ir šūkis "In Code We Trust" šviesiai pilkame fone.
Programinės įrangos kūrimas

Kaip padidinti savo Dev komandą neprarandant produkto kokybės

Didinate savo kūrėjų komandą? Sužinokite, kaip augti neprarandant produkto kokybės. Šiame vadove aptariami ženklai, kad atėjo laikas didinti komandą, komandos struktūra, įdarbinimas, vadovavimas ir įrankiai - ir kaip The Codest gali...

GERIAUSIAS
Programinės įrangos kūrimas

Sukurkite ateičiai atsparias žiniatinklio programas: The Codest ekspertų komandos įžvalgos

Sužinokite, kaip The Codest puikiai kuria keičiamo dydžio interaktyvias žiniatinklio programas, naudodama pažangiausias technologijas ir užtikrindama vientisą naudotojų patirtį visose platformose. Sužinokite, kaip mūsų patirtis skatina skaitmeninę transformaciją ir verslo...

GERIAUSIAS
Programinės įrangos kūrimas

10 geriausių Latvijoje įsikūrusių programinės įrangos kūrimo įmonių

Naujausiame mūsų straipsnyje sužinokite apie geriausias Latvijos programinės įrangos kūrimo įmones ir jų inovatyvius sprendimus. Sužinokite, kaip šie technologijų lyderiai gali padėti pakelti jūsų verslo lygį.

thecodest
Įmonių ir didinimo sprendimai

"Java" programinės įrangos kūrimo pagrindai: A Guide to outsourcing Outsourcing Successfully

Išnagrinėkite šį esminį vadovą, kaip sėkmingai outsourcing "Java" programinę įrangą kurti, kad padidintumėte efektyvumą, įgytumėte patirties ir sėkmingai įgyvendintumėte projektus su The Codest.

thecodest

Prenumeruokite mūsų žinių bazę ir būkite nuolat informuoti apie IT sektoriaus patirtį.

    Apie mus

    The Codest - tarptautinė programinės įrangos kūrimo bendrovė, turinti technologijų centrus Lenkijoje.

    Jungtinė Karalystė - būstinė

    • 303B biuras, 182-184 High Street North E6 2JA
      Londonas, Anglija

    Lenkija - vietiniai technologijų centrai

    • Fabryczna biurų parkas, Aleja
      Pokoju 18, 31-564 Krokuva
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšuva, Lenkija

    The Codest

    • Pagrindinis
    • Apie mus
    • Paslaugos
    • Case Studies
    • Sužinokite, kaip
    • Karjera
    • Žodynas

    Paslaugos

    • Patariamoji tarnyba
    • Programinės įrangos kūrimas
    • Galinės dalies kūrimas
    • Priekinės dalies kūrimas
    • Staff Augmentation
    • Atgalinės versijos kūrėjai
    • Debesų inžinieriai
    • Duomenų inžinieriai
    • Kita
    • QA inžinieriai

    Ištekliai

    • Faktai ir mitai apie bendradarbiavimą su išoriniu programinės įrangos kūrimo partneriu
    • Iš JAV į Europą: Kodėl Amerikos startuoliai nusprendžia persikelti į Europą?
    • Technikos plėtros centrų užsienyje palyginimas: Tech Offshore Europa (Lenkija), ASEAN (Filipinai), Eurazija (Turkija)
    • Kokie yra svarbiausi CTO ir CIO iššūkiai?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Autorinės teisės © 2026 The Codest. Visos teisės saugomos.

    lt_LTLithuanian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian es_ESSpanish nl_NLDutch etEstonian elGreek pt_PTPortuguese cs_CZCzech lvLatvian is_ISIcelandic lt_LTLithuanian