window.pipedriveLeadboosterConfig = { base: 'leadbooster-chat.pipedrive.com', companyId: 11580370, playbookUuid: '22236db1-6d50-40c4-b48f-8b11262155be', version: 2, } ;(funktion () { var w = vindue if (w.LeadBooster) { console.warn('LeadBooster findes 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 }) }, } } })() MOM! Han har blokeret tråde igen! - The Codest
Codest
  • Om os
  • Serviceydelser
    • Udvikling af software
      • Frontend-udvikling
      • Backend-udvikling
    • Staff Augmentation
      • Frontend-udviklere
      • Backend-udviklere
      • Dataingeniører
      • Cloud-ingeniører
      • QA-ingeniører
      • Andet
    • Det rådgivende
      • Revision og rådgivning
  • Industrier
    • Fintech og bankvirksomhed
    • E-commerce
    • Adtech
    • Sundhedsteknologi
    • Produktion
    • Logistik
    • Biler
    • IOT
  • Værdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leder af levering
  • Vores team
  • Casestudier
  • Ved hvordan
    • Blog
    • Møder
    • Webinarer
    • Ressourcer
Karriere Tag kontakt til os
  • Om os
  • Serviceydelser
    • Udvikling af software
      • Frontend-udvikling
      • Backend-udvikling
    • Staff Augmentation
      • Frontend-udviklere
      • Backend-udviklere
      • Dataingeniører
      • Cloud-ingeniører
      • QA-ingeniører
      • Andet
    • Det rådgivende
      • Revision og rådgivning
  • Værdi for
    • ADMINISTRERENDE DIREKTØR
    • CTO
    • Leder af levering
  • Vores team
  • Casestudier
  • Ved hvordan
    • Blog
    • Møder
    • Webinarer
    • Ressourcer
Karriere Tag kontakt til os
Pil tilbage GÅ TILBAGE
2021-07-20
Udvikling af software

MOM! Han har blokeret tråde igen!

Codest

Pawel Rybczynski

Software Engineer

"Don`t block the event loop ..." - du har sikkert hørt denne sætning mange gange ... Det overrasker mig ikke, for det er en af de vigtigste forudsætninger, når man arbejder med Node. Men der er også en anden "ting", som du skal lade være med at blokere - Worker Pool. Hvis den forsømmes, kan den have en betydelig indvirkning på applikationens ydeevne og endda dens sikkerhed.

Tråde

Det vigtigste at huske: Der er to typer tråde i Node.js: Hovedtråd - som håndteres af Begivenheds-loopog Arbejderpulje (trådpulje) - som er puljen af tråde -.
takket være libuv. Hver af dem har et forskelligt job. Målet for den første er at håndtere ikke-blokerende I/O-operationer, og den anden er ansvarlig for CPU-intensivt arbejde og også blokerende I/O.

diagram over libuv

Men hvad er en tråd, og hvordan adskiller den sig fra en proces? Der er flere forskelle, men den vigtigste for os er, hvordan hukommelsen allokeres til dem. Du kan tænke på en proces som på en applikation. I hver proces er der en del af hukommelsen, som kun er dedikeret til denne proces. Så den ene proces har ikke adgang til den andens hukommelse, og denne egenskab sikrer høj sikkerhed. For at etablere kommunikation mellem dem skal vi udføre noget arbejde. Tråde er anderledes. Tråde kører inde i en proces og deler den samme hukommelse, så der er slet ikke noget problem med, at tråde deler data.

Men én ting skaber problemer. Det kaldes race condition. Trådene kan køre på samme tid, så hvordan ved vi, hvilken der slutter først? Det kan ske, at den første gang du kører den, slutter den første operation først, og næste gang kan det vise sig at være det modsatte, og den anden operation slutter før den første. Forestil dig at arbejde med skrive-/læseoperationer under sådanne forhold! Et mareridt! Det er nogle gange meget svært at skrive korrekte Kode i et multi-threaded miljø.

De flertrådede sprog har også et stort hukommelsesoverhead, fordi de opretter en separat tråd for hver anmodning; så hvis du vil kalde 1000 anmodninger, opretter de 1000 tråde.

Hvordan håndterer man sådan et problem? Brug en enkelt tråd i stedet! Og det er, hvad Knudepunkt tilbyder dig.

enkelt tråd eventloop

Som en JavaScript Udvikler Jeg opfordrer dig til at se film
hvor Bart Belder tydeligt forklarer begrebet event loop. Ovenstående diagram er taget fra hans præsentation. Og hvis du slet ikke kender disse begreber, kan både Knudepunkt og Libuv har fremragende dokumentation 🙂.

Om blokering

I JavaScript udvikling industrien siger de, at fordi Knudepunkt er enkelttrådet og ikke-blokerende, kan du opnå højere samtidighed med de samme ressourcer end med flertrådede løsninger. Det er sandt, men det er ikke så smukt og nemt, som det måske ser ud til.

Siden Node.js er single-threaded (JS-delen), vil CPU-intensive opgaver blokere alle igangværende anmodninger, indtil den pågældende opgave er afsluttet. Så det er sandt, at i Node.js kan man blokere alle forespørgsler, bare fordi en af dem indeholder en blokerende instruktion. Den blokerende kode betyder, at det tager mere end et par millisekunder at afslutte. Men forveksl ikke lang svartid med blokering. Svaret fra databasen kan tage meget lang tid, men det blokerer ikke din proces (applikation).

Blokerende metoder udføres synkront, og ikke-blokerende metoder udføres asynkront.

Hvordan kan du gøre dit event-loop langsommere (eller blokere det)?

  • sårbar regex - et sårbart regulært udtryk er det, som din regulære udtryksmotor kan bruge eksponentiel tid på; du kan læse mere om dem her,
  • JSON-operationer på store objekter,
  • ved hjælp af synkrone API'er fra Knudepunkt kernemoduler i stedet for asynkrone versioner; alle I/O-metoder i Node.js-standardbiblioteket indeholder også deres asynkrone versioner,
  • andre programmeringsfejl, som f.eks. synkrone uendelige løkker.

I så fald, da Worker Pool bruger en pulje af tråde, er det så muligt at blokere dem også? Desværre, ja 🙁. Knudepunkt er baseret på en filosofi en tråd til mange klienter. Lad os antage, at en given opgave, der udføres af en bestemt Worker, er meget kompleks og kræver mere tid. Som følge heraf blokeres Workern, og den kan ikke bruges til at udføre andre ventende opgaver, før dens instruktioner er udført. Som du sikkert har gættet nu, kan det påvirke ydeevnen. Du kan forhindre sådanne problemer ved at minimere variationen i task-tider ved at bruge task-partitionering.

Konklusion

Undgå blokering, det er helt sikkert. Hvis du kun kan, skal du altid vælge asynkrone versioner af standardbibliotekets API'er. Ellers kan klienten efter at have kørt din app opleve flere problemer, der starter med forringet gennemstrømning og slutter med fuldstændig tilbagetrækning, hvilket er fatalt set fra brugerens perspektiv.

Læs mere om det:

Hvorfor du (sandsynligvis) bør bruge Typescript

Hvordan dræber man ikke et projekt med dårlig kodningspraksis?

Strategier for at hente data i NextJS

Relaterede artikler

Udvikling af software

Byg fremtidssikrede webapps: Indsigt fra The Codest's ekspertteam

Oplev, hvordan The Codest udmærker sig ved at skabe skalerbare, interaktive webapplikationer med banebrydende teknologier, der leverer sømløse brugeroplevelser på tværs af alle platforme. Lær, hvordan vores ekspertise driver digital transformation og...

DENKODEST
Udvikling af software

Top 10 Letlands-baserede softwareudviklingsvirksomheder

Læs om Letlands bedste softwareudviklingsvirksomheder og deres innovative løsninger i vores seneste artikel. Find ud af, hvordan disse teknologiledere kan hjælpe med at løfte din virksomhed.

thecodest
Løsninger til virksomheder og scaleups

Grundlæggende om Java-softwareudvikling: En guide til succesfuld outsourcing

Udforsk denne vigtige guide til vellykket outsourcing af Java-softwareudvikling for at forbedre effektiviteten, få adgang til ekspertise og skabe projektsucces med The Codest.

thecodest
Udvikling af software

Den ultimative guide til outsourcing i Polen

Den voldsomme stigning i outsourcing i Polen er drevet af økonomiske, uddannelsesmæssige og teknologiske fremskridt, der fremmer it-vækst og et erhvervsvenligt klima.

TheCodest
Løsninger til virksomheder og scaleups

Den komplette guide til IT-revisionsværktøjer og -teknikker

IT-revisioner sikrer sikre, effektive og kompatible systemer. Lær mere om deres betydning ved at læse hele artiklen.

Codest
Jakub Jakubowicz CTO og medstifter

Tilmeld dig vores vidensbase, og hold dig opdateret om ekspertisen fra it-sektoren.

    Om os

    The Codest - International softwareudviklingsvirksomhed med tech-hubs i Polen.

    Storbritannien - Hovedkvarter

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

    Polen - Lokale teknologiske knudepunkter

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

      Codest

    • Hjem
    • Om os
    • Serviceydelser
    • Casestudier
    • Ved hvordan
    • Karriere
    • Ordbog

      Serviceydelser

    • Det rådgivende
    • Udvikling af software
    • Backend-udvikling
    • Frontend-udvikling
    • Staff Augmentation
    • Backend-udviklere
    • Cloud-ingeniører
    • Dataingeniører
    • Andet
    • QA-ingeniører

      Ressourcer

    • Fakta og myter om at samarbejde med en ekstern softwareudviklingspartner
    • Fra USA til Europa: Hvorfor beslutter amerikanske startups sig for at flytte til Europa?
    • Sammenligning af Tech Offshore-udviklingsknudepunkter: Tech Offshore Europa (Polen), ASEAN (Filippinerne), Eurasien (Tyrkiet)
    • Hvad er de største udfordringer for CTO'er og CIO'er?
    • Codest
    • Codest
    • Codest
    • Privacy policy
    • Vilkår for brug af hjemmesiden

    Copyright © 2025 af The Codest. Alle rettigheder forbeholdes.

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