window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', versjon: 2, } ;(function () { var w = vindu if (w.LeadBooster) { console.warn('LeadBooster finnes allerede') } 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 }) }, } } })() MAMMA! Han blokkerte tråder igjen! - The Codest
The Codest
  • Om oss
  • Tjenester
    • Programvareutvikling
      • Frontend-utvikling
      • Backend-utvikling
    • Staff Augmentation
      • Frontend-utviklere
      • Backend-utviklere
      • Dataingeniører
      • Ingeniører i skyen
      • QA-ingeniører
      • Annet
    • Det rådgivende
      • Revisjon og rådgivning
  • Industrier
    • Fintech og bankvirksomhet
    • E-commerce
    • Adtech
    • Helseteknologi
    • Produksjon
    • Logistikk
    • Bilindustrien
    • IOT
  • Verdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leveransesjef
  • Vårt team
  • Casestudier
  • Vet hvordan
    • Blogg
    • Møter
    • Webinarer
    • Ressurser
Karriere Ta kontakt med oss
  • Om oss
  • Tjenester
    • Programvareutvikling
      • Frontend-utvikling
      • Backend-utvikling
    • Staff Augmentation
      • Frontend-utviklere
      • Backend-utviklere
      • Dataingeniører
      • Ingeniører i skyen
      • QA-ingeniører
      • Annet
    • Det rådgivende
      • Revisjon og rådgivning
  • Verdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leveransesjef
  • Vårt team
  • Casestudier
  • Vet hvordan
    • Blogg
    • Møter
    • Webinarer
    • Ressurser
Karriere Ta kontakt med oss
Pil tilbake GÅ TILBAKE
2021-07-20
Programvareutvikling

MAMMA! Han blokkerte tråder igjen!

The Codest

Pawel Rybczynski

Software Engineer

"Ikke blokker event-løkken..." - du har sikkert hørt denne setningen mange ganger... Det overrasker meg ikke, for det er en av de viktigste forutsetningene når du jobber med Node. Men det er også en annen "ting" som du bør avstå fra å blokkere - Worker Pool. Hvis du glemmer det, kan det ha en betydelig innvirkning på applikasjonens ytelse og til og med dens sikkerhet.

Tråder

Det viktigste å huske: Det finnes to typer tråder i Node.js: Main Thread - som håndteres av Hendelsessløyfe, og Arbeidstakerpool (trådpool) - som er en pool av tråder - og
takket være libuv. Hver av dem har forskjellige oppgaver. Den første har som mål å håndtere ikke-blokkerende I/O-operasjoner, mens den andre er ansvarlig for CPU-intensivt arbeid og blokkerende I/O.

diagram over libuv

Men hva er en tråd, og hvordan er den forskjellig fra en prosess? Det er flere forskjeller, men den viktigste for oss er hvordan minnet allokeres til dem. Du kan tenke på en prosess som på en applikasjon. Inne i hver prosess er det en del av minnet som er dedikert bare til denne prosessen. Den ene prosessen har altså ikke tilgang til minnet til den andre, og denne egenskapen sørger for høy sikkerhet. For å etablere kommunikasjon mellom dem, må vi gjøre noe arbeid. Tråder er annerledes. Tråder kjører inne i en prosess og deler det samme minnet, så det er ikke noe problem i det hele tatt med tråder som deler data.

Det er imidlertid én ting som skaper problemer. Det kalles "race condition". Trådene kan kjøre samtidig, så hvordan vet vi hvilken som avsluttes først? Det kan hende at første gang du kjører den, slutter den første operasjonen først, og neste gang kan det vise seg å være motsatt, og den andre operasjonen slutter før den første. Tenk deg å jobbe med skrive-/leseoperasjoner under slike forhold! Et mareritt! Det er noen ganger veldig vanskelig å skrive korrekt kode i et flertrådet miljø.

De flertrådede språkene har også et stort minneoverhead fordi de oppretter en egen tråd for hver forespørsel, så hvis du vil ringe 1000 forespørsler, oppretter de 1000 tråder.

Hvordan håndtere et slikt problem? Bruk en enkelt tråd i stedet! Og det er det som Knutepunkt tilbyr deg.

enkelttråd eventloop

Som en JavaScript utvikler Jeg oppfordrer deg til å se film
der Bart Belder tydelig forklarer konseptet med hendelsessløyfen. Diagrammet ovenfor er hentet fra presentasjonen hans. Og hvis du ikke kjenner disse begrepene i det hele tatt, både Knutepunkt og Libuv har utmerket dokumentasjon 🙂 .

Om blokkering

I JavaScript-utvikling industrien sier de at fordi Knutepunkt er enkelttrådet og ikke-blokkerende, kan du oppnå høyere samtidighet med de samme ressursene enn med flertrådede løsninger. Det er sant, men det er ikke så vakkert og enkelt som det kan virke.

Siden Node.js er enkelttrådet (JS-delen), vil CPU-intensive oppgaver blokkere alle forespørsler som pågår til den aktuelle oppgaven er fullført. Så det er sant at i Node.js kan du blokkere alle forespørsler bare fordi en av dem inneholdt en blokkerende instruksjon. Blokkerende kode betyr at det tar mer enn noen få millisekunder å fullføre. Men ikke forveksle lang responstid med blokkering. Svaret fra databasen kan ta svært lang tid, men det blokkerer ikke prosessen (applikasjonen).

Blokkerende metoder utføres synkront, mens ikke-blokkerende metoder utføres asynkront.

Hvordan kan du bremse (eller blokkere) hendelsessløyfen din?

  • sårbar regex - et sårbart regulært uttrykk er et uttrykk som kan ta eksponentiell tid å behandle; du kan lese mer om dem her her,
  • JSON-operasjoner på store objekter,
  • ved hjelp av synkrone API-er fra Knutepunkt kjernemoduler i stedet for asynkrone versjoner; alle I/O-metodene i Node.js-standardbiblioteket har også sine asynkrone versjoner,
  • andre programmeringsfeil, som synkrone uendelige løkker.

I så fall, siden Worker Pool bruker en pool av tråder, er det mulig å blokkere dem også? Dessverre, ja 🙁 ... Knutepunkt er basert på en filosofi én tråd for mange klienter. La oss anta at en gitt oppgave som utføres av en bestemt Worker, er svært kompleks og trenger mer tid for å bli ferdig. Dette fører til at Workern blokkeres, og den kan ikke brukes til å utføre andre ventende oppgaver før instruksjonene er utført. Som du sikkert har gjettet nå, kan det påvirke ytelsen. Du kan forhindre slike problemer ved å minimere variasjonen i oppgavetider ved å bruke oppgavepartisjonering.

Konklusjon

Unngå blokkering, det er helt sikkert. Hvis du bare kan, bør du alltid velge asynkrone versjoner av standardbibliotekets API-er. Ellers kan klienten oppleve flere problemer etter å ha kjørt appen din, fra redusert gjennomstrømning til fullstendig tilbaketrekning, noe som er fatalt sett fra brukerens perspektiv.

Les mer om dette:

Derfor bør du (sannsynligvis) bruke Typescript

Hvordan unngår man å drepe et prosjekt med dårlig kodingspraksis?

Strategier for datahenting i NextJS

Relaterte artikler

Programvareutvikling

Bygg fremtidssikre webapper: Innsikt fra The Codests ekspertteam

Oppdag hvordan The Codest utmerker seg når det gjelder å skape skalerbare, interaktive webapplikasjoner med banebrytende teknologi som gir sømløse brukeropplevelser på tvers av alle plattformer. Finn ut hvordan ekspertisen vår driver digital transformasjon og...

THECODEST
Programvareutvikling

Topp 10 Latvia-baserte programvareutviklingsselskaper

I vår nyeste artikkel kan du lese mer om Latvias beste programvareutviklingsselskaper og deres innovative løsninger. Oppdag hvordan disse teknologilederne kan bidra til å løfte virksomheten din.

thecodest
Løsninger for bedrifter og oppskalering

Grunnleggende om Java-programvareutvikling: En guide til vellykket outsourcing

Utforsk denne viktige veiledningen om vellykket outsourcing av Java-programvareutvikling for å øke effektiviteten, få tilgang til ekspertise og drive frem prosjektsuksess med The Codest.

thecodest
Programvareutvikling

Den ultimate guiden til outsourcing i Polen

Den kraftige økningen i outsourcing i Polen er drevet av økonomiske, utdanningsmessige og teknologiske fremskritt, noe som fremmer IT-vekst og et forretningsvennlig klima.

TheCodest
Løsninger for bedrifter og oppskalering

Den komplette guiden til verktøy og teknikker for IT-revisjon

IT-revisjoner sørger for sikre, effektive og kompatible systemer. Les hele artikkelen for å lære mer om viktigheten av dem.

The Codest
Jakub Jakubowicz CTO og medgrunnlegger

Abonner på vår kunnskapsbase og hold deg oppdatert på ekspertisen fra IT-sektoren.

    Om oss

    The Codest - Internasjonalt programvareutviklingsselskap med teknologisentre i Polen.

    Storbritannia - Hovedkvarter

    • Kontor 303B, 182-184 High Street North E6 2JA
      London, England

    Polen - Lokale teknologisentre

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Warszawa, Polen

      The Codest

    • Hjem
    • Om oss
    • Tjenester
    • Casestudier
    • Vet hvordan
    • Karriere
    • Ordbok

      Tjenester

    • Det rådgivende
    • Programvareutvikling
    • Backend-utvikling
    • Frontend-utvikling
    • Staff Augmentation
    • Backend-utviklere
    • Ingeniører i skyen
    • Dataingeniører
    • Annet
    • QA-ingeniører

      Ressurser

    • Fakta og myter om samarbeid med en ekstern programvareutviklingspartner
    • Fra USA til Europa: Hvorfor velger amerikanske oppstartsbedrifter å flytte til Europa?
    • Sammenligning av Tech Offshore Development Hubs: Tech Offshore Europa (Polen), ASEAN (Filippinene), Eurasia (Tyrkia)
    • Hva er de største utfordringene for CTO-er og CIO-er?
    • The Codest
    • The Codest
    • The Codest
    • Retningslinjer for personver
    • Vilkår for bruk av nettstedet

    Opphavsrett © 2025 av The Codest. Alle rettigheter forbeholdt.

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