Node.js vs GO
  1. Node.js vs GO

    Ak sa pozeráme čisto na výkon a schopnosť spracovať veľa requestov, rozdiel medzi Node.js a Go (Golang) je pomerne výrazný, a závisí od architektúry aplikácie a konkrétneho prípadu použitia.

  2. Architektúra a concurrency
    • Node.js
      • Používa jedno vlákno s event-loop a asynchrónnym I/O.
      • Skvelé pre veľa I/O-bound requestov (API volania, DB dotazy, sieťové operácie), pretože event-loop neblokuje.
      • Ale CPU-heavy úlohy môžu blokovať celý event loop, čo spomalí spracovanie requestov.
      • Na viacjadrové spracovanie potrebuješ cluster alebo worker threads, čo komplikuje architektúru.
    • Go
      • Má lightweight goroutines, ktoré sú lacnejšie než vlákna OS.
      • Natívna concurrency, takže zvládne desiatky tisíc requestov súčasne bez zložitých trikov.
      • CPU aj I/O-bound úlohy sú veľmi efektívne zvládnuté.
  3. Výkon
    • Node.js
      • Node.js je rýchle pri asynchrónnom I/O, ale pri vysokom počte requestov alebo náročnej logike môže byť úzkym hrdlom event-loop.
    • Go
      • Go je väčšinou rýchlejší:
        • Kompilovaný do natívneho kódu → menej overheadu.
        • Nižšia latencia a menšie spotreba pamäte pri veľkom počte requestov.
        • Menej závislé na externých workeroch alebo clusteroch.
      • Benchmarky:
        • Pri HTTP API s tisíckami requestov za sekundu Go často zvláda 2–5× viac requestov pri nižšej latencii než Node.js.
        • Pri veľmi jednoduchých requestoch rozdiel môže byť menší, ale pri komplexnej logike Go stále vedie.
  4. Ekosystém a vývoj
    • Node.js
      • Obrovský ekosystém NPM, rýchly vývoj, množstvo knižníc.
    • Go
      • Menej knižníc, ale veľmi stabilný, jednoduchý deployment (jediný binárny súbor), skvelý pre microservices.
  5. Záver
    • Node.js
      • Super pre rýchly prototyp, I/O-heavy aplikácie, menej kritický výkon.
    • Go
      • Lepší pre high-load, latency-sensitive služby, mikroslužby, servery s veľkým počtom requestov.
    • Tip
      • Pre extrémne vysoký počet requestov a nízku latenciu je Go jasná voľba. Node.js zvládne veľa requestov dobre, ale pri veľmi vysokom zaťažení je potrebné viac optimalizácií a infraštruktúry (clustery, load balancery).
  6. Porovnanie Node.js vs Go
    Kritérium Node.js Go
    Max requestov/s 10–15k 50–100k
    Latencia/request 1–5 ms 0.2–1 ms
    Spotreba RAM 50–100 MB 20–50 MB
    CPU-heavy úlohy blokuje event-loop zvládne efektívne
    Multi-core škálovanie potreba cluster/moduly automatické cez goroutines
    Ekosystém / vývoj NPM, rýchly prototyping jednoduchý deployment, stabilný
  7. Čo sú lightweight goroutines

    Gorutina je v Go niečo ako vlákno (thread), ale omnoho ľahšie a efektívnejšie. Nie je spravovaná priamo OS, ale Go runtime, ktorý zabezpečuje plánovanie a rozdelenie na systémové vlákna.

  8. Hlavné vlastnosti
    • Nízka pamäťová stopa (~2 KB stack na začiatku, dynamicky rastie).
    • M:N plánovanie – gorutiny sa mapujú na systémové vlákna cez Go runtime.
    • Jednoduché spúšťanie pomocou kľúčového slova go.
    • Komunikácia cez kanály namiesto zdieľanej pamäte.
  9. Prečo sú lightweight
    • Nemajú overhead ako OS vlákna (menší context switch).
    • Používajú dynamický stack namiesto fixného.
    • Plánovanie robí Go runtime optimalizovaný na tisíce rutín.
  10. Porovnanie gorutiny vs OS vlákno
    Kritérium OS Thread Gorutina
    Štartovacia veľkosť stacku ~1–2 MB ~2 KB (dynamicky rastie)
    Plánovanie Kernel (OS) Go runtime (M:N model)
    Počet súbežných jednotiek Tisíce Státisíce až milióny
    Overhead Vysoký Nízky
    Komunikácia Zdieľaná pamäť, locky Kanály (channels)