(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'); Ósamstillt og einþráða JavaScript? - 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
2020-09-02
Hugbúnaðarþróun

Ósamhliða og einþráða JavaScript?

Lukasz Kolko

JavaScript er einþráða forritunarmál og jafnframt óblokkandi, ósamhverft og samhliða. Í þessari grein verður útskýrt hvernig það gerist.

Hér er tómt.
  • Keyrslutími

JavaScript er túlkuð forritunarmál, ekki samansett. Þetta þýðir að það þarf túlk sem umbreytir JS kóði í vélkóða. Það eru nokkrar tegundir túlkana (svokölluð vélar). Vinsælustu vafra vélarnar eru V8 (Chrome), Quantum (Firefox) og WebKit (Safari). Að auki er V8 einnig notað í vinsælu forritunarumhverfi utan vafra, Node.js.

Hver vél inniheldur minnishaug, köllunarstafla, atburðarhring, biðröð köllunarkalla og WebAPI með HTTP-beiðnum, tímamótum, atburðum o.s.frv., allt framkvæmt á sinn eigin hátt til að hraðari og öruggari túlkunar á JS-kóðanum.

Þróun JavaScript

Grunnuppbygging JS keyrslutímans. Höfundur: Alex Zlatkov

Einstofna þráður

Einstæðra þráða forritunarmál er forritunarmál með einum köllunarpalla og einum minnishaug. Það þýðir að það keyrir aðeins eitt verkefni í einu.

A haugur er samfelldur minnisvæði sem úthlutar staðbundnu samhengi fyrir hvert keyrt fall.

A haugur er mun stærra svæði sem geymir allt sem úthlutað er dýnamískt.

A kallsröð er gögn uppbygging sem í grundvallaratriðum skráir hvar við erum í forritinu.

Kallsröð

Skrifum einfaldan kóða og fylgjumst með því sem gerist á köllunarröðinni.

JavaScript hugbúnaðarþróun

Eins og sjá má eru fallin bætt við köllunarhringinn, keyrð og síðar eytt. Þetta er svokallað LIFO-kerfi – síðast inn, fyrst út. Hver færsla í köllunarhringnum kallast a stafsrammi.

Þekking á köllunarröðinni er gagnleg til að lesa villuspor. Almennt er nákvæm ástæða villunnar efst í fyrstu línu, þó að framkvæmd kóðans sé frá neðri hluta upp.

Stundum geturðu tekist á við algenga villu sem tilkynnt er um af Hámarksstærð köllunarröð hefur verið farið fram úr. Það er auðvelt að fá þetta með endurköllun:

function foo() {
    foo()
}
foo()

og vafrinn eða skelurinn okkar frýs. Hver vafrinn, jafnvel mismunandi útgáfur hans, hefur mismunandi hámarksstærð köllunarstigs. Í langflestum tilfellum duga þær og á að leita vandamálsins annars staðar.

Stíflaður hringingastafli

Hér er dæmi um að hindra JS-þráðinn. Reyndum að lesa a fóó skrár og a bar að nota Knútur.js samstillt fall lestuSkráSamstillt.

JavaScript kóði

Þetta er hringrásargif. Eins og þú sérð, bíður JavaScript-vélin eftir fyrstu kölluninni. lestuSkráSamstillt er lokið. En þetta mun ekki gerast vegna þess að það er ekkert fóó skrá, svo að önnur fallið verður aldrei kallað.

Ósamstillt atferli

Hins vegar getur JS einnig verið óblokkandi og hagað sér eins og það væri fjölþráða. Það þýðir að það bíður ekki eftir svari við forritaskil símtöl, I/O-atburðir o.s.frv., og geta haldið áfram kóðakeyrslu. Þetta er mögulegt þökk sé JS-vélum sem nota (undir vélarhúsinu) raunveruleg fjölþráða forritunarmál, eins og C++ (Chrome) eða Rust (Firefox). Þær bjóða upp á okkur með Vefur API undir vélarhlífum vafra eða t.d. I/O API undir Node.js.

JavaScript forritunarmál

Í GIF-inu hér að ofan sjáum við að fyrsta fallið er sett á köllunarhringinn og Hæ er strax framkvæmt í konsólinni.

Síðan köllum við setTimeout Fall sem vafrinn veitir í gegnum WebAPI. Það fer í köllunarhringinn og asynkróna afturköllun hans. fóó Funkían fer í biðröð WebApi, þar sem hún bíður eftir kölluninni sem á að eiga sér stað eftir 3 sekúndur.

Á meðan heldur forritið áfram kóðanum og við sjáum Hæ. Ég er ekki blokkaður. í stjórnborðinu.

Eftir að því er kallað á það fer hver aðgerð í biðröð WebAPI til Símtalsröð. Það er þar sem fall bíða þar til köllunarhringurinn er tómur. Þegar það gerist eru þau flutt þangað eitt í einu.

Svo, þegar okkar setTimeout Tíminn lýkur niðurtalningunni, okkar fóó fall fer í biðröð köllunaraðferða, bíður þar til köllunarhringrásin verður tiltæk, fer þangað, er keyrt og við sjáum Hæ frá ósamstilltri callback í stjórnborðinu.

Viðburðahringrás

Spurningin er: Hvernig veit keyrslutíminn að köllunarhringurinn sé tómur og hvernig er atburðurinn í callback-röðinni kallaður? Kynntu þér atburðarhringinn. Hann er hluti af JavaScript-vélinni. Þessi ferill athugar stöðugt hvort köllunarhringurinn sé tómur og, ef svo er, fylgist með hvort atburður sé í callback-röðinni sem bíður eftir að vera kallaður.

Þetta er allt töfrinn á bak við tjöldin!

Að draga saman kenninguna

Samhliða vinnsla og samhliða framkvæmd

Samtímisvinna merkir að framkvæma mörg verkefni á sama tíma en ekki samtímis. Til dæmis vinna tvö verkefni á yfirhöfuðnum tímabilum.

Samhliða merkir að framkvæma tvö eða fleiri verkefni samtímis, t.d. að framkvæma margar útreikningar á sama tíma.

Þræðir og ferlar

Þræðir eru röð kóðakeyrslna sem hægt er að keyra óháð hvorri annarri.

Ferli er dæmi um keyrandi forrit. Forrit getur haft marga ferla.

Samskeytis- og ósamkeytis

Í samstilltur Í forritun eru verkefni keyrð eitt á eftir öðru. Hvert verkefni bíður eftir að fyrri verkefni ljúki og er keyrt aðeins þá.

Í ósamstilltur Í forritun, þegar eitt verkefni er keyrt, geturðu skipt yfir í annað verkefni án þess að bíða eftir að hið fyrra ljúki.

Samskeytis- og ósamstilltar aðgerðir í einþráða- og fjölþráðaumhverfi

Samsýnt með einni þræðiVerkefni eru keyrð eitt á eftir öðru. Hvert verkefni bíður eftir að fyrra verkefni sé keyrt.

Samskeytislega með mörgum þráðumVerkefni eru keyrð í mismunandi þráðum en bíða eftir öðrum verkefnum sem eru í gangi á öðrum þráðum.

Ósamsett með einni þræðiVerkefni hefjast handa við að framkvæma án þess að bíða eftir að annað verkefni ljúki. Á hverjum tíma er aðeins eitt verkefni í gangi.

Ósamsett með mörgum þráðumVerkefni eru keyrð í mismunandi þráðum án þess að bíða eftir að önnur verkefni ljúki og ljúka keyrslu sinni sjálfstætt.

JavaScript-flokkun

Ef við skoðum hvernig JavaScript-vélar virka undir vélarhuðinni, getum við flokkað JavaScript sem ósamhverft og einþráða túlkuð forritunarmál. Orðið “túlkað” er mjög mikilvægt því það þýðir að málið sé alltaf háð keyrslutíma og aldrei eins hratt og þýðil þjálpuð forritunarmál með innbyggðu fjölþráða vinnu.

Það er vert að taka fram að Node.js getur náð raunverulegu fjölþráða vinnslu, að því gefnu að hver þráður sé keyrður sem sjálfstæður ferill. Það eru til bókasöfn fyrir þetta, en Node.js hefur innbyggða eiginleika sem kallast Verkþráður.

Allir GIF-ar af atburðahringnum koma frá Stækkunargler Forrit sem Philip Roberts bjó til, þar sem þú getur prófað ósamstilltar aðstæður þínar.

Lesa meira:

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

Gæði fyrst! 5 einföld skref til að lint-a kóðann þinn með GitHub-vinnuflæði í JavaScript-verkefninu

Hvernig má bæta Vue.js-forrit? Nokkur hagnýt ráð

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