The Codest
  • O nás
  • Služby
    • Vývoj softwaru
      • Vývoj frontendů
      • Vývoj backendu
    • Staff Augmentation
      • Vývojáři frontendů
      • Vývojáři backendu
      • Datoví inženýři
      • Cloudoví inženýři
      • Inženýři QA
      • Další
    • To Advisory
      • Audit a poradenství
  • Odvětví
    • Fintech a bankovnictví
    • E-commerce
    • Adtech
    • Healthtech
    • Výroba
    • Logistika
    • Automobilový průmysl
    • IOT
  • Hodnota za
    • CEO
    • CTO
    • Manažer dodávek
  • Náš tým
  • Case Studies
  • Vědět jak
    • Blog
    • Setkání
    • Webové semináře
    • Zdroje
Kariéra Spojte se s námi
  • O nás
  • Služby
    • Vývoj softwaru
      • Vývoj frontendů
      • Vývoj backendu
    • Staff Augmentation
      • Vývojáři frontendů
      • Vývojáři backendu
      • Datoví inženýři
      • Cloudoví inženýři
      • Inženýři QA
      • Další
    • To Advisory
      • Audit a poradenství
  • Hodnota za
    • CEO
    • CTO
    • Manažer dodávek
  • Náš tým
  • Case Studies
  • Vědět jak
    • Blog
    • Setkání
    • Webové semináře
    • Zdroje
Kariéra Spojte se s námi
Šipka zpět ZPĚT
2021-07-20
Vývoj softwaru

MAMINKA! Zase zablokoval vlákna!

The Codest

Pawel Rybczynski

Software Engineer

"Don`t block the event loop..." - tuto větu jste pravděpodobně slyšeli mnohokrát... Nepřekvapuje mě to, protože je to jeden z nejdůležitějších předpokladů při práci s Node. Existuje však i druhá "věc", kterou byste neměli blokovat - Worker Pool. Pokud ho zanedbáte, může mít výrazný dopad na výkon aplikace a dokonce i na její bezpečnost.

Vlákna

Hlavní věc, kterou je třeba si zapamatovat: existují dva typy vláken v. Node.js: Hlavní vlákno - o které se stará Smyčka událostía Bazén pracovníků (thread pool) - což je fond vláken -
díky libuv. Každý z nich má jinou práci. Úkolem prvního z nich je zpracovávat neblokované I/O operace a druhý je zodpovědný za práci náročnou na procesor a také za blokování I/O operací.

diagram libuv

Co je to ale vlákno a v čem se liší od procesu? Rozdílů je několik, ale nejdůležitější je, že se liší nás je způsob, jakým je jim přidělována paměť. O procesu můžete uvažovat jako o aplikaci. Uvnitř každého procesu je kus paměti vyhrazený právě pro tento proces. Jeden proces tedy nemá přístup k paměti druhého procesu a tato vlastnost zajišťuje vysokou bezpečnost. Abychom mezi nimi mohli navázat komunikaci, musíme udělat určitou práci. Vlákna se liší. Vlákna běží uvnitř procesu a sdílejí stejnou paměť, takže se sdílením dat mezi vlákny není vůbec žádný problém.

Jeden problém však způsobuje problém. Říká se mu race condition. Vlákna mohou běžet současně, jak tedy poznáme, které skončí dříve? Může se stát, že při prvním spuštění skončí první operace jako první a příště to může dopadnout naopak a druhá operace skončí dříve než první. Představte si práci s operacemi zápisu/čtení za takových podmínek! Noční můra! Někdy je velmi těžké napsat správný kód ve vícevláknovém prostředí.

Vícevláknové jazyky mají také velkou paměťovou režii, protože pro každý požadavek vytvářejí samostatné vlákno; pokud tedy chcete zavolat 1000 požadavků, vytvoří 1000 vláken.

Jak se s takovým problémem vypořádat? Použijte raději jedno vlákno! A to je to, co Uzel vám nabízí.

jedno vlákno eventloop

Jako JavaScript vývojář Doporučuji vám sledovat film
ve kterém Bart Belder jasně vysvětluje koncept smyčky událostí. Výše uvedený diagram je převzat z jeho prezentace. A pokud tyto pojmy vůbec neznáte, oba Uzel a Libuv mají vynikající dokumentaci 🙂

O blokování

Na adrese Vývoj JavaScript průmyslu říkají, že proto. Uzel je jednovláknový a neblokuje se, můžete dosáhnout vyšší souběžnosti se stejnými prostředky než u vícevláknových řešení. Je to pravda, ale není to tak krásné a snadné, jak se může zdát.

Vzhledem k tomu, že Node.js je jednovláknový (část JS), úlohy náročné na procesor zablokují všechny probíhající požadavky, dokud není daná úloha dokončena. Je tedy pravda, že v Node.js můžete zablokovat každý požadavek jen proto, že jeden z nich obsahoval blokační instrukci. Blokující kód znamená, že jeho dokončení trvá déle než několik milisekund. Nepleťte si však dlouhou dobu odezvy s blokováním. Odpověď z databáze může trvat velmi dlouho, ale neblokuje váš proces (aplikaci).

Blokovací metody se provádějí synchronně a neblokující metody se provádějí asynchronně.

Jak můžete zpomalit (nebo zablokovat) smyčku událostí?

  • zranitelný regex - zranitelný regulární výraz je takový, na kterém může váš regulární výrazový engine zabírat exponenciální čas; můžete si o nich přečíst více. zde,
  • Operace JSON s velkými objekty,
  • pomocí synchronních rozhraní API z Uzel místo asynchronních verzí; všechny I/O metody ve standardní knihovně Node.js poskytují také své asynchronní verze,
  • další programátorské chyby, jako jsou synchronní nekonečné smyčky.

Je v takovém případě možné blokovat i tato vlákna, protože Worker Pool využívá pool vláken? Bohužel ano 🙁 Uzel je založena na filozofii jedno vlákno pro mnoho klientů. Předpokládejme, že daný úkol prováděný konkrétním pracovníkem je velmi složitý a potřebuje k dokončení více času. V důsledku toho je Worker zablokován a nelze jej použít k provedení žádné jiné čekající úlohy, dokud nebudou jeho pokyny provedeny. Jak jste již pravděpodobně uhodli, může to mít vliv na výkon. Těmto problémům můžete předejít minimalizací rozdílů v časech úloh pomocí rozdělení úloh.

Závěr

Určitě se vyhněte blokování. Pokud můžete, vždy volte asynchronní verze standardních knihovních rozhraní API. V opačném případě může klient po spuštění vaší aplikace zaznamenat několik problémů, počínaje sníženou propustností a konče úplným odstoupením, což je z pohledu uživatele fatální.

Přečtěte si více:

Proč byste (pravděpodobně) měli používat Typescript

Jak nezničit projekt špatnými kódovacími postupy?

Strategie načítání dat v NextJS

Související články

Ilustrace zdravotnické aplikace pro chytré telefony s ikonou srdce a rostoucím zdravotním grafem, označená logem The Codest, která představuje digitální zdraví a řešení HealthTech.
Vývoj softwaru

Softwarové vybavení pro zdravotnictví: a případy použití

Nástroje, na které se dnes zdravotnické organizace spoléhají, se v ničem nepodobají papírovým kartám z doby před desítkami let. zdravotnický software dnes podporuje zdravotnické systémy, péči o pacienty a moderní poskytování zdravotní péče v klinických a...

NEJKRÁSNĚJŠÍ
Abstraktní ilustrace klesajícího sloupcového grafu se stoupající šipkou a zlatou mincí symbolizující efektivitu nákladů nebo úspory. V levém horním rohu se zobrazuje logo The Codest se sloganem "In Code We Trust" na světle šedém pozadí.
Vývoj softwaru

Jak rozšířit tým vývojářů bez ztráty kvality produktu

Zvětšujete svůj vývojový tým? Zjistěte, jak růst, aniž byste museli obětovat kvalitu produktu. Tento průvodce se zabývá příznaky, že je čas na škálování, strukturou týmu, najímáním zaměstnanců, vedením a nástroji - a také tím, jak může The Codest...

NEJKRÁSNĚJŠÍ
Vývoj softwaru

Vytváření webových aplikací odolných vůči budoucnosti: postřehy týmu odborníků The Codest

Zjistěte, jak společnost The Codest vyniká při vytváření škálovatelných, interaktivních webových aplikací pomocí nejmodernějších technologií, které poskytují bezproblémové uživatelské prostředí na všech platformách. Zjistěte, jak naše odborné znalosti podporují digitální transformaci a obchodní...

NEJKRÁSNĚJŠÍ
Vývoj softwaru

10 nejlepších lotyšských společností zabývajících se vývojem softwaru

V našem nejnovějším článku se dozvíte o nejlepších lotyšských společnostech zabývajících se vývojem softwaru a jejich inovativních řešeních. Zjistěte, jak mohou tito technologičtí lídři pomoci pozvednout vaše podnikání.

thecodest
Podniková a škálovací řešení

Základy vývoje softwaru v jazyce Java: A Guide to Outsourcing Successfully

Prozkoumejte tuto základní příručku o úspěšném vývoji softwaru outsourcing Java, abyste zvýšili efektivitu, získali přístup k odborným znalostem a dosáhli úspěchu projektu s The Codest.

thecodest

Přihlaste se k odběru naší znalostní databáze a získejte aktuální informace o odborných znalostech z oblasti IT.

    O nás

    The Codest - Mezinárodní společnost zabývající se vývojem softwaru s technologickými centry v Polsku.

    Spojené království - ústředí

    • Kancelář 303B, 182-184 High Street North E6 2JA
      Londýn, Anglie

    Polsko - Místní technologická centra

    • Kancelářský park Fabryczna, Aleja
      Pokoju 18, 31-564 Krakov
    • Brain Embassy, Konstruktorska
      11, 02-673 Varšava, Polsko

      The Codest

    • Home
    • O nás
    • Služby
    • Case Studies
    • Vědět jak
    • Kariéra
    • Slovník

      Služby

    • To Advisory
    • Vývoj softwaru
    • Vývoj backendu
    • Vývoj frontendů
    • Staff Augmentation
    • Vývojáři backendu
    • Cloudoví inženýři
    • Datoví inženýři
    • Další
    • Inženýři QA

      Zdroje

    • Fakta a mýty o spolupráci s externím partnerem pro vývoj softwaru
    • Z USA do Evropy: Proč se americké startupy rozhodly přesídlit do Evropy?
    • Srovnání technických vývojových center v zahraničí: Tech Offshore Evropa (Polsko), ASEAN (Filipíny), Eurasie (Turecko)
    • Jaké jsou hlavní výzvy CTO a CIO?
    • The Codest
    • The Codest
    • The Codest
    • Privacy policy
    • Website terms of use

    Copyright © 2026 by The Codest. Všechna práva vyhrazena.

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