(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'); MAMA! Viņš atkal bloķēja pavedienus! - The Codest
The Codest
  • Par mums
  • Pakalpojumi
    • Programmatūras izstrāde
      • Frontend izveide
      • Backend izstrāde
    • Staff Augmentation
      • Frontend izstrādātāji
      • Backend izstrādātāji
      • Datu inženieri
      • Mākoņa inženieri
      • QA inženieri
      • Citi
    • Tā Konsultatīvais dienests
      • Audits un konsultācijas
  • Nozares
    • Fintech un banku darbība
    • E-commerce
    • Adtech
    • Healthtech
    • Ražošana
    • Loģistika
    • Automobiļu nozare
    • IOT
  • Vērtība par
    • CEO
    • CTO
    • Piegādes vadītājs
  • Mūsu komanda
  • Case Studies
  • Zināt, kā
    • Blogs
    • Tikšanās
    • Tiešsaistes semināri
    • Resursi
Karjera Sazinieties ar mums
  • Par mums
  • Pakalpojumi
    • Programmatūras izstrāde
      • Frontend izveide
      • Backend izstrāde
    • Staff Augmentation
      • Frontend izstrādātāji
      • Backend izstrādātāji
      • Datu inženieri
      • Mākoņa inženieri
      • QA inženieri
      • Citi
    • Tā Konsultatīvais dienests
      • Audits un konsultācijas
  • Vērtība par
    • CEO
    • CTO
    • Piegādes vadītājs
  • Mūsu komanda
  • Case Studies
  • Zināt, kā
    • Blogs
    • Tikšanās
    • Tiešsaistes semināri
    • Resursi
Karjera Sazinieties ar mums
Atpakaļ bultiņa ATGRIEZTIES ATPAKAĻ
2019-04-24
Programmatūras izstrāde

MAMA! Viņš atkal bloķēja pavedienus!

The Codest

Pawel Rybczynski

Software Engineer

“Nebloķējiet notikumu cilpu...” - droši vien esat šo teikumu dzirdējuši daudzas reizes... Mani tas nepārsteidz, jo tas ir viens no svarīgākajiem pieņēmumiem, strādājot ar Node. Taču ir arī otra “lieta”, kuru nevajadzētu bloķēt, - darba ņēmēju pūls. Ja tas tiek atstāts novārtā, tas var būtiski ietekmēt lietojumprogrammas veiktspēju un pat tās drošību.

Diegi

Galvenais, kas jāatceras: ir divu veidu pavedieni. Node.js: Galvenais pavediens - ko apstrādā Notikumu cilpa, un Darbinieku kopums (pavedienu pūls) - kas ir pavedienu pūls -
paldies libuv. Katram no viņiem ir atšķirīgs darbs. Pirmā uzdevums ir apstrādāt nebloķējošas I/O operācijas, bet otrais ir atbildīgs par CPU intensīvu darbu un arī bloķējošām I/O operācijām.

libuv diagramma

Bet kas ir pavediens un ar ko tas atšķiras no procesa? Atšķirības ir vairākas, bet vissvarīgākā no tām ir tā. mums ir tas, kā tiem tiek piešķirta atmiņa. Par procesu var domāt kā par lietojumprogrammu. Katra procesa iekšienē ir atmiņa, kas paredzēta tikai šim procesam. Tātad vienam procesam nav piekļuves otra procesa atmiņai, un šī īpašība nodrošina augstu drošību. Lai nodibinātu saziņu starp procesiem, mums ir jāveic zināms darbs. Pavedieni ir atšķirīgi. Pavedieni darbojas vienā procesā un koplieto vienu un to pašu atmiņu, tāpēc nav nekādu problēmu ar pavedienu koplietošanu. dati.

Tomēr viens jautājums rada problēmu. To sauc par sacīkšu stāvokli. Vītnes var darboties vienlaicīgi, tad kā mēs varam zināt, kura beigsies pirmā? Var gadīties, ka pirmajā palaišanas reizē pirmā operācija beidzas pirmā, bet nākamajā reizē var izrādīties otrādi un otrā operācija beidzas pirms pirmās. Iedomājieties, kā šādos apstākļos var strādāt ar rakstīšanas/lasīšanas operācijām! Košs murgs! Dažreiz ir ļoti grūti uzrakstīt pareizu kods daudzpavedienu vidē.

Turklāt daudzpavedienu valodām ir liela atmiņas pieskaitāmība, jo tās katram pieprasījumam izveido atsevišķu pavedienu; tātad, ja vēlaties izsaukt 1000 pieprasījumus, tās izveido 1000 pavedienus.

Kā risināt šādu problēmu? Tā vietā izmantojiet vienu pavedienu! Un tas ir tas, ko Mezgls piedāvā.

viena pavediena notikumu cikls

Kā JavaScript izstrādātājs Es aicinu jūs noskatīties filma
kurā Bārts Belderis skaidri izskaidro notikumu cilpas jēdzienu. Iepriekš minētā diagramma ir ņemta no viņa prezentācijas. Un, ja jūs vispār nezināt šos terminus, gan Mezgls un Libuv ir lieliska dokumentācija 🙂

Par bloķēšanu

In JavaScript attīstība nozare viņi saka, ka tāpēc, ka Mezgls ir vienpavedienu un bez bloķēšanas, ar tiem pašiem resursiem var panākt lielāku vienlaicīgumu nekā ar daudzpavedienu risinājumiem. Tā ir taisnība, bet tas nav tik skaisti un vienkārši, kā varētu šķist.

Tā kā Node.js ir viena pavediena (JS daļa), CPU ietilpīgi uzdevumi bloķēs visus notiekošos pieprasījumus, līdz konkrētais uzdevums tiks pabeigts. Tātad ir taisnība, ka Node.js var bloķēt katru pieprasījumu tikai tāpēc, ka vienā no tiem ir bloķēšanas instrukcija. Bloķēšanas kods nozīmē, ka tā izpildei ir nepieciešamas vairāk nekā dažas milisekundes. Taču nejauciet ilgu atbildes laiku ar bloķēšanu. Atbilde no datubāzes var aizņemt ļoti ilgu laiku, bet tas nebloķē jūsu procesu (lietojumprogrammu).

Bloķēšanas metodes tiek izpildītas sinhroni, bet nebloķēšanas metodes tiek izpildītas asinhroni.

Kā palēnināt (vai bloķēt) notikumu cilpu?

  • neaizsargāta regulārā izteiksme - neaizsargāta regulārā izteiksme ir tā, kurai jūsu regulārās izteiksmes dzinējs var aizņemt eksponenciālu laiku; par to varat lasīt vairāk. šeit,
  • JSON operācijas ar lieliem objektiem,
  • izmantojot sinhrono API no Mezgls kodola moduļu asinhrono versiju vietā; visas Node.js standarta bibliotēkas I/O metodes nodrošina arī asinhronās versijas,
  • citas programmēšanas kļūdas, piemēram, sinhronas bezgalīgas cilpas.

Vai tādā gadījumā, tā kā Worker Pool izmanto pavedienu kopumu, ir iespējams bloķēt arī tos? Diemžēl jā 🙁 Mezgls ir balstīta uz filozofiju. viens pavediens daudziem klientiem. Pieņemsim, ka konkrētais uzdevums, ko veic konkrēts darbinieks, ir ļoti sarežģīts un tā izpildei nepieciešams vairāk laika. Rezultātā šis Worker tiek bloķēts, un to nevar izmantot neviena cita neizpildīta uzdevuma izpildei, kamēr nav izpildīti tā norādījumi. Kā jūs jau droši vien nojaušat, tas var ietekmēt veiktspēju. Šādas problēmas var novērst, samazinot uzdevumu izpildes laika svārstības, izmantojot uzdevumu dalīšanu.

Secinājums

Noteikti izvairieties no bloķēšanas. Ja vien varat, vienmēr izvēlieties standarta bibliotēkas API asinhronās versijas. Pretējā gadījumā pēc jūsu lietotnes palaišanas klientam var rasties vairākas problēmas, sākot ar pazeminātu caurlaidspēju un beidzot ar pilnīgu atteikšanos, kas no lietotāja viedokļa ir liktenīga.

Lasīt vairāk:

Kāpēc jums (iespējams) vajadzētu izmantot Typescript

Kā nenogalināt projektu ar sliktu kodēšanas praksi?

Datu iegūšanas stratēģijas NextJS

Saistītie raksti

Ilustrācija viedtālruņa veselības aprūpes lietotnei ar sirds ikonu un pieaugošo veselības diagrammu, kas apzīmēta ar The Codest logotipu, kurš pārstāv digitālās veselības un HealthTech risinājumus.
Programmatūras izstrāde

Veselības aprūpes programmatūra: Mārketinga programmatūra: veidi, izmantošanas gadījumi

Šodien veselības aprūpes organizāciju rīcībā esošie rīki vairs neatgādina papīra diagrammas, kas tika izmantotas pirms vairākiem gadu desmitiem. veselības aprūpes programmatūra tagad atbalsta veselības aprūpes sistēmas, pacientu aprūpi un mūsdienīgu veselības aprūpes sniegšanu klīniskajās un...

TĀKĀDĒJAIS
Abstrakta ilustrācija ar lejupejošu joslu diagrammu ar augošu bultiņu un zelta monētu, kas simbolizē izmaksu efektivitāti vai ietaupījumus. Augšējā kreisajā stūrī redzams The Codest logotips ar saukli "In Code We Trust" uz gaiši pelēka fona.
Programmatūras izstrāde

Kā paplašināt izstrādātāju komandu, nezaudējot produkta kvalitāti

Palielināt izstrādātāju komandu? Uzziniet, kā augt, nezaudējot produkta kvalitāti. Šajā rokasgrāmatā aplūkotas pazīmes, kas liecina, ka ir pienācis laiks paplašināt komandu, komandas struktūra, pieņemšana darbā, vadība un rīki, kā arī tas, kā The Codest var...

TĀKĀDĒJAIS
Programmatūras izstrāde

Uz nākotni noturīgu tīmekļa lietojumprogrammu veidošana: The Codest ekspertu komandas ieskats

Uzziniet, kā The Codest izceļas mērogojamu, interaktīvu tīmekļa lietojumprogrammu izveidē, izmantojot modernākās tehnoloģijas un nodrošinot viengabalainu lietotāja pieredzi visās platformās. Uzziniet, kā mūsu zināšanas veicina digitālo transformāciju un biznesa...

TĀKĀDĒJAIS
Programmatūras izstrāde

Top 10 Latvijā bāzēti programmatūras izstrādes uzņēmumi

Mūsu jaunākajā rakstā uzziniet vairāk par Latvijas labākajiem programmatūras izstrādes uzņēmumiem un to inovatīvajiem risinājumiem. Uzziniet, kā šie tehnoloģiju līderi var palīdzēt uzlabot jūsu biznesu.

thecodest
Uzņēmumu un mērogošanas risinājumi

Java programmatūras izstrādes pamati: A Guide to Outsourcing Successfully

Izpētiet šo būtisko rokasgrāmatu par veiksmīgu outsourcing Java programmatūras izstrādi, lai uzlabotu efektivitāti, piekļūtu speciālajām zināšanām un sekmīgi īstenotu projektus ar The Codest.

thecodest

Abonējiet mūsu zināšanu bāzi un saņemiet jaunāko informāciju par IT nozares pieredzi.

    Par mums

    The Codest - starptautisks programmatūras izstrādes uzņēmums ar tehnoloģiju centriem Polijā.

    Apvienotā Karaliste - Galvenā mītne

    • 303B birojs, 182-184 High Street North E6 2JA
      Londona, Anglija

    Polija - Vietējie tehnoloģiju centri

    • Fabryczna Office Park, Aleja
      Pokoju 18, 31-564 Krakova
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšava, Polija

    The Codest

    • Sākums
    • Par mums
    • Pakalpojumi
    • Case Studies
    • Zināt, kā
    • Karjera
    • Vārdnīca

    Pakalpojumi

    • Tā Konsultatīvais dienests
    • Programmatūras izstrāde
    • Backend izstrāde
    • Frontend izveide
    • Staff Augmentation
    • Backend izstrādātāji
    • Mākoņa inženieri
    • Datu inženieri
    • Citi
    • QA inženieri

    Resursi

    • Fakti un mīti par sadarbību ar ārējo programmatūras izstrādes partneri
    • No ASV uz Eiropu: Kāpēc Amerikas jaunuzņēmumi nolemj pārcelties uz Eiropu?
    • Tehnoloģiju ārzonas attīstības centru salīdzinājums: Tech Offshore Eiropa (Polija), ASEAN (Filipīnas), Eirāzija (Turcija)
    • Kādi ir galvenie CTO un CIO izaicinājumi?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Autortiesības © 2026 The Codest. Visas tiesības aizsargātas.

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