Skip to content

Latest commit

 

History

1 Commit

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Benchmark sul Thread Pool di libuv in Node.js

Questo progetto contiene una serie di script per dimostrare e visualizzare l'impatto della dimensione del thread pool di libuv sulle performance di operazioni asincrone CPU-bound in Node.js.

L'esperimento mostra come, contrariamente a una credenza comune, Promise.all non garantisce un parallelismo infinito, ma è limitato da un pool di thread (di default 4) per certi tipi di operazioni.

Prerequisiti

Per eseguire questo progetto, assicurati di avere installato:

  • Node.js: Versione 18.x o superiore.
  • pnpm: Un gestore di pacchetti veloce ed efficiente. Puoi installarlo con npm install -g pnpm.

Installazione

Clona la repository e installa le dipendenze necessarie:

git clone <url-della-tua-repo>
cd libuv-benchmarks
pnpm install

Utilizzo

Il progetto include due script principali per eseguire i test.

1. Test Rapido (time.js)

Questo script esegue un numero specifico di task pesanti e stampa il tempo totale di esecuzione. È utile per un test veloce.

Comando:

# Esegue 10 task pesanti in parallelo
node scripts/time.js 10

2. Benchmark e Grafico (graph.js)

Questo è lo script principale. Esegue una serie di benchmark, da 1 fino a N task, e genera un'immagine PNG (benchmark-graph.png) con un grafico che visualizza le performance.

Comando:

# Esegue benchmark da 1 a 16 task e genera il grafico
node scripts/graph.js 16

Al termine dell'esecuzione, troverai un grafico nella cartella graphs.

Modificare la Dimensione del Thread Pool

Il cuore dell'esperimento è la variabile d'ambiente UV_THREADPOOL_SIZE. Impostandola prima di lanciare lo script, puoi controllare quanti thread libuv utilizzerà.

Esempio (Linux/macOS):

# Esegui il benchmark con un thread pool di 8
UV_THREADPOOL_SIZE=8 node scripts/graph.js 16

Esempio (PowerShell, Windows):

# Imposta la variabile per la sessione corrente e poi esegui
$env:UV_THREADPOOL_SIZE=8; node scripts/graph.js 16

Confrontando i grafici generati con diverse dimensioni del thread pool (es. 4, 8, 16, e un valore superiore al numero di core della tua CPU) potrai vedere chiaramente l'impatto sulle performance.

About

Wait, so Promise.all doesn't actually do parallel processing? Well, it's a little more complicated than that.

Topics

Resources

Stars

0 stars

Watchers

0 watching

Forks

Contributors

Languages