(function(w,d,s,l,i){w[l]=w[l]||[];w[l].push({'gtm.start': new Date().getTime(),event:'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'); Mamma! Hann lokaði þráðum aftur! - The Codest
The Codest
  • Um okkur
  • Þjónusta
    • Hugbúnaðarþróun
      • Framhliðþróun
      • Bakendaþróun
    • Staff Augmentation
      • Framhliðaráþrófarar
      • Bakhliðaráþróunaraðilar
      • Gagnaverkfræðingar
      • Skýjaverkfræðingar
      • Gæðatryggingartæknimenn
      • Annað
    • Það er ráðgjafi
      • Endurskoðun og ráðgjöf
  • Iðnaðargreinar
    • Fjártæknifyrirtæki og bankastarfsemi
    • E-commerce
    • Adtech
    • Heilbrigðistækni
    • Framleiðsla
    • Flutningar
    • Bifreiða
    • Internet hlutanna
  • Gildi fyrir
    • CEO
    • CTO
    • Afhendingarstjóri
  • Teymið okkar
  • Case Studies
  • Vitið hvernig
    • Blogg
    • Fundir
    • Vefnámskeið
    • Auðlindir
Starfsferilmöguleikar Hafðu samband
  • Um okkur
  • Þjónusta
    • Hugbúnaðarþróun
      • Framhliðþróun
      • Bakendaþróun
    • Staff Augmentation
      • Framhliðaráþrófarar
      • Bakhliðaráþróunaraðilar
      • Gagnaverkfræðingar
      • Skýjaverkfræðingar
      • Gæðatryggingartæknimenn
      • Annað
    • Það er ráðgjafi
      • Endurskoðun og ráðgjöf
  • Gildi fyrir
    • CEO
    • CTO
    • Afhendingarstjóri
  • Teymið okkar
  • Case Studies
  • Vitið hvernig
    • Blogg
    • Fundir
    • Vefnámskeið
    • Auðlindir
Starfsferilmöguleikar Hafðu samband
Aftur ör Farðu aftur
2019-04-24
Hugbúnaðarþróun

Mamma! Hann lokaði þráðum aftur!

The Codest

Pawel Rybczynski

Software Engineer

“Ekki stífla atburðahringinn…” – þú hefur líklega heyrt þessa setningu mörgum sinnum… Ég er ekki hissa því hún er ein af mikilvægustu forsendunum þegar unnið er með Node. En það er líka önnur “hlutur” sem þú ættir að forðast að stífla – vinnuhópinn. Ef honum er vanrækt getur það haft veruleg áhrif á afköst forritsins og jafnvel öryggi þess.

Hér er tómt.

Þræðir

Það helsta sem þarf að muna: það eru tvær tegundir af þráðum í Node.js: Aðalþráður – sem er meðhöndlaður af Viðburðahringrás, og Vinnuafl (þráðalaug) – sem er laug þráða –
þökk sé libuv. Hver og einn þeirra hefur mismunandi hlutverk. Markmið hins fyrsta er að sjá um óblokkandi I/O-aðgerðir, en sá annar sér um örgjörvamiðaða vinnu og einnig blokkandi I/O.

Líkan af libuv

En hvað er þráður og hvernig er hann ólíkur ferli? Það eru nokkur munarmál, en það mikilvægasta fyrir okkur Þetta er hvernig minni er úthlutað þeim. Þú getur hugsað um ferli eins og forrit. Inni í hverju ferli er minnisbiti sem er eingöngu ætlaður því ferli. Þannig hefur eitt ferli ekki aðgang að minni hins ferlisins, og þessi eiginleiki tryggir háa öryggisgæslu. Til að koma á samskiptum á milli þeirra þurfum við að vinna nokkuð. Þræðir eru öðruvísi. Þræðir keyra innan eins ferlis og deila sama minni, svo engin vandamál koma upp við að þeir deili minni. gögn.

Hins vegar veldur eitt atriði vandamáli. Það kallast keppnisástand. Þræðirnir geta keyrt samtímis, svo hvernig vitum við hvaða aðgerð lýkur fyrst? Það getur gerst að í fyrsta sinn sem þú keyrir það ljúki fyrsta aðgerðin fyrst, en næst gæti komið fyrir að hin önnur aðgerðin ljúki á undan þeirri fyrstu. Ímyndaðu þér að vinna með skrifa- og lestraraðgerðir við slíkar aðstæður! Martröð! Stundum er mjög erfitt að skrifa rétt. kóði í fjölþráða umhverfi.

Einnig hafa fjölþráða forritunarmál mikið minnisálag vegna þess að þau búa til aðskilda þráð fyrir hverja beiðni; svo ef þú vilt kalla 1000 beiðnir, búa þau til 1000 þræði.

Hvernig á að takast á við slíkt vandamál? Notaðu eina þráð í staðinn! Og það er það sem Knútur sem býður þér.

einstæð atburðahringrás

Sem JavaScript þróunaraðili Ég hvet þig til að horfa á kvikmynd
í hvoru Bart Belder útskýrir hugtakið atburðarhringinn skýrt. Ofangreint myndrit er tekið úr kynningu hans. Og ef þú þekkir þessi hugtök alls ekki, bæði Knútur og Libuv hafa framúrskarandi skjöl 🙂

Um lokun

Í JavaScript þróun Í greininni segja þeir að vegna Knútur Er einþráða og óhindrandi, svo þú getur náð meiri samhliða vinnslu með sömu auðlindum en með fjölþráðu lausnum. Það er satt, en það er ekki eins fallegt og einfalt og það kann að virðast.

Frá Node.js er einþráða (JS hluta), örgjörvafreist verkefni munu stöðva allar beiðnir sem eru í gangi þar til viðkomandi verkefni er lokið. Svo, það er satt að í Node.js Þú getur lokað á allar beiðnir bara vegna þess að ein þeirra innihélt lokunar­skipun. Lokunarkóði þýðir að það tekur lengri tíma en nokkrar millisekúndur að ljúka. En ruglaðu ekki saman löngum svartíma og lokun. Svarið frá gagnagrunninum getur tekið mjög langan tíma, en það stöðvar ekki ferlið þitt (forritið).

Blokkandi aðferðir keyrast samstillt og óblokkandi aðferðir keyrast ósamstillt.

Hvernig geturðu hægt á atburðarhringnum þínum (eða hindrað hann)?

  • Véikburða reglubundið mynstur er slíkt sem reglubundins mynstursvinnslaforritið þitt gæti tekið veldisvísislega langan tíma; þú getur lesið meira um þau. hér,
  • JSON-aðgerðir á stórum hlutum,
  • með því að nota samstilltar API-er frá Knútur kjarnaeiningar í stað ósamstilltra útgáfa; allar I/O-aðferðir í Node.js staðalbókasafninu bjóða einnig upp á sínar ósamstilltu útgáfur,
  • aðrir forritunarvankantar, eins og samstilltar endalausar lykkjur.

Í því tilviki, þar sem Worker Pool notar þráðapott, er hægt að stöðva þá líka? Því miður, já 🙁 Knútur er byggt á heimspeki einn þráður fyrir marga viðskiptavini. Segjum að tiltekið verkefni sem ákveðinn vinnumaður sinnir sé mjög flókið og taki lengri tíma að ljúka. Vinnumaðurinn verður þá fastur og getur ekki sinnt öðrum biðandi verkefnum fyrr en fyrirmælum hans hefur verið framfylgt. Eins og þú hefur líklega giskað á getur þetta haft áhrif á afköst. Þú getur komið í veg fyrir slík vandamál með því að lágmarka breytileika í verkefnatímum með verkefnaskiptingu.

Ályktun

Forðastu blokkun, það er víst. Ef þú getur, veldu alltaf ósamhverfar útgáfur af API-um staðalsafnsins. Annars, eftir að forritið þitt hefur keyrt, getur viðskiptavinurinn lent í ýmsum vandamálum, allt frá skertu gegnumstreymi upp í algjöra aftengingu, sem er banvænt úr sjónarhóli notandans.

Lesa meira:

Af hverju þú ættir (líklega) að nota TypeScript

Hvernig á ekki að drepa verkefni með slæmum forritunarvenjum?

Stefnur við gagnaleit í NextJS

Tengdar greinar

Myndskreyting af heilbrigðisforriti fyrir snjallsíma með hjartatákni og hækkandi heilsufarsgrafík, merkt með The Codest-merkinu, sem táknar stafræna heilsu og HealthTech-lausnir.
Hugbúnaðarþróun

Heilbrigðis-hugbúnaður: gerðir og notkunartilvik

Tólin sem heilbrigðisstofnanir treysta á í dag líta ekkert út eins og pappírsskjöl frá fyrri áratugum. Heilbrigðisforrit styðja nú heilbrigðiskerfi, sjúklingameðferð og nútímalega heilbrigðisþjónustu á klínískum og...

THECODEST
Yfirlitsmynd sem sýnir hnignandi súlurit með uppstrekktri ör og gullmynt sem táknar kostnaðarhagkvæmni eða sparnað. The Codest-merkið birtist í efra vinstra horni með slagorðinu "In Code We Trust" á ljósgráum bakgrunni.
Hugbúnaðarþróun

Hvernig á að stækka þróunarteymið án þess að fórna gæðum vörunnar

Ertu að stækka þróunarteymið þitt? Lærðu hvernig á að vaxa án þess að fórna gæðum vörunnar. Þessi leiðarvísir fjallar um merki um að kominn sé tími til að stækka, uppbyggingu teymisins, ráðningar, forystu og verkfæri—og hvernig teymið getur...

THECODEST
Hugbúnaðarþróun

Búðu til vefumsóknir sem þola framtíðina: innsýn frá sérfræðiteymi The Codest

Uppgötvaðu hvernig The Codest skarar fram úr við að búa til stigstækar, gagnvirkar vefumsóknir með nýjustu tækni, sem bjóða upp á hnökralausa notendaupplifun á öllum kerfum. Lærðu hvernig sérfræðiþekking okkar knýr fram stafræna umbreytingu og viðskipti...

THECODEST
Hugbúnaðarþróun

Topp 10 hugbúnaðarþróunarfyrirtæki í Lettlandi

Kynntu þér fremstu hugbúnaðarþróunarfyrirtæki Lettlands og nýstárlegar lausnir þeirra í nýjustu grein okkar. Uppgötvaðu hvernig þessir tækniforingjar geta hjálpað til við að efla fyrirtækið þitt.

thecodest
Lausnir fyrir fyrirtæki og vaxtarfyrirtæki

Grunnatriði í Java hugbúnaðarþróun: Leiðarvísir að árangursríkri útvistun

Kannaðu þessa ómissandi leiðbeiningu um árangursríka outsourcing Java hugbúnaðarþróun til að auka skilvirkni, afla aðgangs að sérfræðiþekkingu og tryggja árangur verkefna með The Codest.

thecodest

Gerðu þig áskrifanda að þekkingargrunni okkar og vertu upplýstur um sérfræðiþekkingu upplýsingatæknigeirans.

    Um okkur

    The Codest – Alþjóðlegt hugbúnaðarþróunarfyrirtæki með tæknimiðstöðvar í Póllandi.

    Bretland - Höfuðstöðvar

    • Skrifstofa 303B, 182-184 High Street North E6 2JA
      Lundúnir, England

    Pólland - staðbundin tæknimiðstöðvar

    • Fabryczna skrifstofugarður, Aleja
      Herbergi 18, 31-564 Kraków
    • Brain Embassy, Konstruktorska
      11, 02-673 Varsjá, Pólland

    The Codest

    • Heim
    • Um okkur
    • Þjónusta
    • Case Studies
    • Vitið hvernig
    • Starfsferilmöguleikar
    • Orðabók

    Þjónusta

    • Það er ráðgjafi
    • Hugbúnaðarþróun
    • Bakendaþróun
    • Framhliðþróun
    • Staff Augmentation
    • Bakhliðaráþróunaraðilar
    • Skýjaverkfræðingar
    • Gagnaverkfræðingar
    • Annað
    • Gæðatryggingartæknimenn

    Auðlindir

    • Staðreyndir og goðsagnir um samstarf við utanaðkomandi hugbúnaðarþróunaraðila
    • Frá Bandaríkjunum til Evrópu: Af hverju ákveða bandarísk sprotafyrirtæki að flytja til Evrópu?
    • Samanburður á tæknifjarkerfisþróunarmiðstöðvum: Tech Offshore Europe (Pólland), ASEAN (Filippseyjar), Eurasia (Tyrkland)
    • Hvert eru helstu áskoranir CTO-a og CIO-a?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Höfundarréttur © 2026 af The Codest. Öll réttindi áskilin.

    is_ISIcelandic
    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 lt_LTLithuanian is_ISIcelandic