2015-03-23 14 views
10

Ho fatto qualche ricerca sulla domanda, ma sembra che la gente enfatizzi solo l'IO non bloccante.In che modo Node.js gestisce le richieste simultanee con un thread?

Diciamo che se ho solo un'applicazione molto semplice per rispondere al testo "Hello World" sul client, ha ancora bisogno di tempo per terminare l'esecuzione, non importa quanto sia veloce. Cosa succede se ci sono due richieste che arrivano esattamente nello stesso momento, in che modo Node.js si assicura che entrambe le richieste vengano elaborate con un thread?

Ho letto il blog Understanding the node.js event loop che dice "Ovviamente sul backend ci sono thread e processi per l'accesso al DB e l'esecuzione del processo". Questa affermazione riguarda IO, ma mi chiedo anche se ci sia un thread separato per gestire la coda di richieste. In questo caso, posso dire che il concetto di thread singolo Node.js si applica solo agli sviluppatori che creano applicazioni su Node.js, ma Node.js è in realtà in esecuzione su più thread dietro la scena?

+0

Si prega di notare che "in node.js, tutto funziona in parallelo tranne il tuo codice ". Il codice viene eseguito in thread singolo, ma gli eventi vengono elaborati da più thread dietro la scena. –

+0

@BibekSubedi, I google 'In node.js, tutto viene eseguito in parallelo tranne il tuo codice', aiuta a chiarire alcune confusioni, grazie. –

risposta

8

Il sistema operativo fornisce ad ogni connessione socket una coda di invio e di ricezione. È qui che i byte si trovano finché qualcosa al livello dell'applicazione li gestisce. Se la coda di ricezione si riempie, nessun client connesso può inviare informazioni finché non c'è spazio disponibile nella coda. Questo è il motivo per cui un'applicazione deve gestire le richieste il più velocemente possibile.

Se si utilizza un sistema * nix, è possibile utilizzare netstat per visualizzare il numero corrente di byte nelle code di invio e di ricezione. In questo esempio, ci sono 0 byte nella coda di ricezione e 240 byte nella coda di invio (in attesa di essere inviati dal sistema operativo).

Proto Recv-Q Send-Q Local Address    Foreign Address    State 
tcp  0  240 x.x.x.x:22     x.x.x.x:*     LISTEN 

Su Linux è possibile controllare la dimensione predefinita e massimo consentito per le dimensioni della trasmissione/ricezione code con il file system proc:

Receive: 

cat /proc/sys/net/core/rmem_default 
cat /proc/sys/net/core/rmem_max 

Send: 

cat /proc/sys/net/core/wmem_max 
cat /proc/sys/net/core/wmem_default 
+0

Quindi stai dicendo che Node.js risponde al sistema operativo per accodare le richieste, non ha la sua implementazione per gestire la coda, è corretto? –

+0

Sì, non c'è nulla di magico in Node.js, come ogni altra applicazione che dipende dal sistema operativo per gestire il livello di rete. – Michael

+0

Sono ancora confuso. Ho appena letto "Questo è in contrasto con il modello di concorrenza più comune di oggi in cui vengono utilizzati i thread del sistema operativo" dalla pagina Node [circa] (https://nodejs.org/about/). Sembra che Nodejs non stia utilizzando il thread del sistema operativo, non sono sicuro di averlo capito correttamente. –

Problemi correlati