window.pipedriveLeadboosterConfig = { base: leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(function () { var w = window if (w.LeadBooster) { console.warn('LeadBooster on juba olemas') } else { w.LeadBooster = { q: [], on: function (n, h) { this.q.push({ t: 'o', n: n, h: h }) }, trigger: function (n) { this.q.push({ t: 't', n: n }) }, } } })() EMA! Ta blokeeris jälle teemasid! - The Codest
The Codest
  • Meie kohta
  • Teenused
    • Tarkvaraarendus
      • Frontend arendus
      • Backend arendus
    • Staff Augmentation
      • Frontend arendajad
      • Backend arendajad
      • Andmeinsenerid
      • Pilveinsenerid
      • QA insenerid
      • Muud
    • See nõuandev
      • Audit ja nõustamine
  • Tööstusharud
    • Fintech & pangandus
    • E-commerce
    • Adtech
    • Healthtech
    • Tootmine
    • Logistika
    • Autotööstus
    • IOT
  • Väärtus
    • CEO
    • CTO
    • Tarnejuht
  • Meie meeskond
  • Case Studies
  • Tea kuidas
    • Blogi
    • Kohtumised
    • Veebiseminarid
    • Ressursid
Karjäärivõimalused Võtke ühendust
  • Meie kohta
  • Teenused
    • Tarkvaraarendus
      • Frontend arendus
      • Backend arendus
    • Staff Augmentation
      • Frontend arendajad
      • Backend arendajad
      • Andmeinsenerid
      • Pilveinsenerid
      • QA insenerid
      • Muud
    • See nõuandev
      • Audit ja nõustamine
  • Väärtus
    • CEO
    • CTO
    • Tarnejuht
  • Meie meeskond
  • Case Studies
  • Tea kuidas
    • Blogi
    • Kohtumised
    • Veebiseminarid
    • Ressursid
Karjäärivõimalused Võtke ühendust
Tagasi nool TAGASI
2021-07-20
Tarkvaraarendus

EMA! Ta blokeeris jälle teemasid!

The Codest

Pawel Rybczynski

Software Engineer

"Ära blokeeri sündmuste tsüklit..." - seda lauset oled ilmselt palju kordi kuulnud... Ma ei ole üllatunud, sest see on üks olulisemaid eeldusi Node'iga töötades. Kuid on ka teine "asi", mille blokeerimisest tuleks hoiduda - Worker Pool. Kui see unarusse jätta, võib see oluliselt mõjutada rakenduse jõudlust ja isegi selle turvalisust.

Niidid

Peamine asi, mida tuleb meeles pidada: on olemas kahte tüüpi niidid. Node.js: Main Thread - millega tegeleb Sündmuse tsükkelja Töötajate reserv (niidipool) - mis on niidipool -
tänu libuvile. Igaühel neist on erinev töö. Esimese eesmärk on tegeleda mitteblokeerivate I/O-operatsioonidega ja teine vastutab CPU-intensiivse töö ja samuti blokeerivate I/O-operatsioonide eest.

libuv diagramm

Aga mis on niit ja kuidas see erineb protsessist? Erinevusi on mitmeid, kuid meie jaoks on kõige olulisem see, kuidas neile mälu eraldatakse. Protsessist võib mõelda nagu rakendusest. Iga protsessi sees on üks tükike mälu, mis on pühendatud ainult sellele protsessile. Seega ei ole ühel protsessil ligipääsu teise protsessi mälule ja see omadus tagab kõrge turvalisuse. Et luua nendevaheline side, peame tegema mõningaid töid. Niidid on erinevad. Niidid jooksevad protsessi sees ja jagavad sama mälu, seega ei ole üldse probleemi, et niidid jagavad andmeid.

Üks küsimus tekitab siiski probleemi. Seda nimetatakse võidujooksu tingimuseks. Niidid võivad töötada korraga, nii et kuidas me teame, milline lõpeb esimesena? Võib juhtuda, et esimesel korral lõpeb esimene operatsioon esimesena, kuid järgmisel korral võib juhtuda vastupidi ja teine operatsioon lõpeb enne esimest. Kujutage ette tööd kirjutamis-/lugemisoperatsioonidega sellistes tingimustes! Õudusunenägu! Mõnikord on väga raske kirjutada korrektset kood mitmesuunalises keskkonnas.

Samuti on mitmelõngalistel keeltel suur mälu koormus, sest nad loovad iga taotluse jaoks eraldi niidi; seega, kui soovite kutsuda 1000 taotlust, loovad nad 1000 niiti.

Kuidas sellise probleemiga toime tulla? Kasutage hoopis ühte lõnga! Ja see ongi see, mida Sõlme pakub teile.

ühe niidi sündmustsükkel

Nagu JavaScript arendaja Ma julgustan teid vaatama film
milles Bart Belder selgitab selgelt sündmuse tsükli mõistet. Ülaltoodud diagramm on võetud tema ettekandest. Ja kui te ei tea neid mõisteid üldse, siis nii Sõlme ja Libuvil on suurepärane dokumentatsioon 🙂

Blokeerimisest

Veebilehel JavaScript arendus tööstus ütlevad, et kuna Sõlme on ühetäheline ja mitteblokeeriv, saab sama ressursiga saavutada suurema samaaegsuse kui mitmeläheliste lahenduste puhul. See on tõsi, kuid see ei ole nii ilus ja lihtne, kui see võib tunduda.

Kuna Node.js on ühetäheline (JS osa), blokeerivad protsessorimahukad ülesanded kõik käimasolevad päringud, kuni konkreetne ülesanne on lõpetatud. Seega on tõsi, et Node.js saate blokeerida kõik taotlused lihtsalt sellepärast, et ühes neist oli blokeeriv käsk sees. Blokeeriv kood tähendab, et selle lõpetamine võtab rohkem kui paar millisekundit. Kuid ärge ajage pikka reageerimisaega segi blokeerimisega. Andmebaasi vastus võib võtta väga kaua aega, kuid see ei blokeeri teie protsessi (rakendust).

Blokeerivad meetodid täidetakse sünkroonselt ja mitteblokeerivad meetodid asünkroonselt.

Kuidas saab aeglustada (või blokeerida) oma sündmuste tsüklit?

  • haavatav regex - haavatav regulaaravaldis on see, mille puhul teie regulaaravaldise mootor võib võtta eksponentsiaalselt aega; nende kohta saate lugeda mare'i. siin,
  • JSON-operatsioonid suurte objektidega,
  • kasutades sünkroonseid APIsid alates Sõlme tuumamoodulid asünkroonsete versioonide asemel; kõik Node.js standardraamatukogu I/O meetodid pakuvad ka oma asünkroonseid versioone,
  • muud programmeerimisvead, näiteks sünkroonne lõpmatu tsükkel.

Kas sellisel juhul, kuna Worker Pool kasutab niitide kogumit, on võimalik ka neid blokeerida? Kahjuks jah 🙁 Sõlme põhineb filosoofial üks niit paljude klientide jaoks. Oletame, et konkreetse Töötaja poolt täidetav ülesanne on väga keeruline ja vajab rohkem aega. Selle tulemusena on Worker blokeeritud ja teda ei saa kasutada teiste pooleliolevate ülesannete täitmiseks, kuni tema juhised on täidetud. Nagu te ilmselt juba arvasite, võib see mõjutada jõudlust. Selliseid probleeme saab vältida, kui vähendada ülesannete aegade varieeruvust, kasutades ülesannete partitsioneerimist.

Kokkuvõte

Vältige blokeerimist, see on kindel. Kui te ainult saate, valige alati standardse raamatukogu API-de asünkroonseid versioone. Vastasel juhul võib kliendil pärast rakenduse käivitamist tekkida mitmeid probleeme, alustades halvenenud läbilaskevõimest ja lõpetades täieliku loobumisega, mis on kasutaja seisukohast fataalne.

Loe edasi:

Miks peaksite (tõenäoliselt) kasutama Typescript'i

Kuidas mitte tappa projekti halbade kodeerimistavadega?

NextJS-i andmete hankimise strateegiad

Seotud artiklid

Tarkvaraarendus

Tulevikukindlate veebirakenduste loomine: The Codest ekspertide meeskonna ülevaade

Avastage, kuidas The Codest paistab skaleeritavate, interaktiivsete veebirakenduste loomisel silma tipptehnoloogiatega, mis pakuvad sujuvat kasutajakogemust kõigil platvormidel. Saate teada, kuidas meie eksperditeadmised aitavad kaasa digitaalsele ümberkujundamisele ja äritegevusele...

THECODEST
Tarkvaraarendus

Top 10 Lätis asuvat tarkvaraarendusettevõtet

Tutvu Läti parimate tarkvaraarendusettevõtete ja nende innovaatiliste lahendustega meie viimases artiklis. Avastage, kuidas need tehnoloogiajuhid saavad aidata teie äri edendada.

thecodest
Enterprise & Scaleups lahendused

Java tarkvaraarenduse põhitõed: A Guide to Outsourcing Successfully

Tutvuge selle olulise juhendiga, kuidas edukalt outsourcing Java tarkvara arendada, et suurendada tõhusust, pääseda ligi eksperditeadmistele ja edendada projekti edu The Codest abil.

thecodest
Tarkvaraarendus

Ülim juhend Poola allhanke kohta

outsourcing kasv Poolas on tingitud majanduslikust, hariduslikust ja tehnoloogilisest arengust, mis soodustab IT kasvu ja ettevõtlussõbralikku kliimat.

TheCodest
Enterprise & Scaleups lahendused

Täielik juhend IT-auditi vahendite ja tehnikate kohta

IT-auditid tagavad turvalised, tõhusad ja nõuetele vastavad süsteemid. Lisateavet nende tähtsuse kohta leiate kogu artiklist.

The Codest
Jakub Jakubowicz CTO & kaasasutajad

Tellige meie teadmistebaas ja jääge kursis IT-sektori eksperditeadmistega.

    Meie kohta

    The Codest - rahvusvaheline tarkvaraarendusettevõte, mille tehnoloogiakeskused asuvad Poolas.

    Ühendkuningriik - peakorter

    • Büroo 303B, 182-184 High Street North E6 2JA
      London, Inglismaa

    Poola - kohalikud tehnoloogiakeskused

    • Fabryczna büroopark, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Varssavi, Poola

      The Codest

    • Kodu
    • Meie kohta
    • Teenused
    • Case Studies
    • Tea kuidas
    • Karjäärivõimalused
    • Sõnastik

      Teenused

    • See nõuandev
    • Tarkvaraarendus
    • Backend arendus
    • Frontend arendus
    • Staff Augmentation
    • Backend arendajad
    • Pilveinsenerid
    • Andmeinsenerid
    • Muud
    • QA insenerid

      Ressursid

    • Faktid ja müüdid koostööst välise tarkvaraarenduspartneriga
    • USAst Euroopasse: Miks otsustavad Ameerika idufirmad Euroopasse ümber asuda?
    • Tech Offshore arenduskeskuste võrdlus: Euroopa (Poola), ASEAN (Filipiinid), Euraasia (Türgi).
    • Millised on CTO ja CIOde peamised väljakutsed?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Copyright © 2025 by The Codest. Kõik õigused kaitstud.

    etEstonian
    en_USEnglish de_DEGerman sv_SESwedish da_DKDanish nb_NONorwegian fiFinnish fr_FRFrench pl_PLPolish arArabic it_ITItalian jaJapanese ko_KRKorean es_ESSpanish nl_NLDutch elGreek etEstonian