Node.js aumenta effettivamente la scalabilità?


21

Ho letto del problema C10K e, in particolare, è la parte che si riferisce all'I / O del server asincrono. http://www.kegel.com/c10k.html#aio

Credo che questo riassuma praticamente ciò che Node.js fa sul server, consentendo ai thread di elaborare le richieste degli utenti facendo affidamento su interruzioni I / O (eventi) per notificare i thread dei lavori completati, anziché far sì che il thread sia responsabile del processo CPU completo. Il thread può andare avanti con altre cose (non bloccanti) ed essere avvisato quando viene fatto un lavoro (ad esempio, viene trovato un file o viene compresso un video).

Ciò significa in seguito che un thread è più "disponibile" per i socket e quindi per gli utenti sul server.

Poi ho trovato questo: http://teddziuba.com/2011/10/straight-talk-on-event-loops.html

Lo scrittore afferma che sebbene il framework basato sugli eventi (threading interrotto) possa liberare thread, in realtà non riduce la quantità di lavoro che una CPU deve fare! La logica qui è che se, per esempio, un utente richiede di comprimere un video che ha caricato, la CPU deve ancora effettivamente fare questo lavoro e bloccherà mentre lo fa (per amor di semplicità, dimentichiamoci del parallelismo qui - a meno che tu non conoscere meglio!).

Sono un programmatore diretto, non un amministratore di server o qualcosa del genere. Sono solo interessato a sapere: Node.js è un dono degli dei del 'cloud computing' o è tutta aria calda e non risparmierà effettivamente tempo e / o denaro alle aziende migliorando la scalabilità?

Grazie molto.


12
Innanzitutto ted è un troll, in secondo luogo node.js è pensato per le applicazioni associate a IO e non per quelle legate alla CPU. Quello che vuoi è una combinazione dei due. Qualsiasi cosa legata alla CPU entra in un nuovo thread / processo. Qualsiasi cosa IO -bound va in un loop di eventi.
Raynos,

1
+! Quel ragazzo è sicuramente un troll.
Patrick Hughes,

Dipende da ciò che confronti - se usi ancora Apache (per qualche motivo) - allora Node è un dono degli dei, ma se lo confronti con Nginx - i miglioramenti sono molto meno drastici e Node è ancora più lento. (dieci volte più lento, 2ms contro 20ms per generare una risposta, MA nei nostri test, Nginx stava dando 504 con un carico moderatamente pesante e Node stava dando risposte normali).
c69,

Ora lo dici ragazzi, il troll è chiaramente un troll. @ c69 sono buone informazioni, grazie mille.
Alex,

Il tuo link "talk diretto sui loop degli eventi" non funziona più.
Robert Harvey,

Risposte:


20

Ovviamente qualsiasi lavoro associato alla CPU utilizzerà la CPU. Bloccherà la CPU in qualsiasi lingua o framework in cui la scrivi.

Node.js è ottimo per quando si ha un lavoro di I / O associato, non associato alla CPU. Non farei un sollevamento pesante in Node, anche se può essere fatto. Node.js risolve problemi reali , non immaginari o immaginari come i server numerici fibonacci . Non è "aria calda".


Sto solo controllando alcuni benchmark e in effetti sembra molto più veloce nel servire le pagine: zgadzaj.com/… .. Immagino che questo sia quello che stavo cercando ...
Alex,

3
@AlexW: L'aspetto positivo di questi benchmark è che stai essenzialmente offrendo contenuti statici. Guarda il mio pezzo di milioni di successi al giorno . Far girare l'interprete PHP per questo è uno spreco. Guarda qualcosa come nodo-statico per servire directory di file.
Josh K,

@AlexW, solo per ricordare che zgadzaj.com/… usa node.js 0.1.103, che ora è vecchio !!
Samyak Bhuta,

4

Mentre il documento C10K è in qualche modo obsoleto per quanto riguarda i dettagli di implementazione, la concorrenza basata sugli eventi (il modello del reattore) è ancora in qualche modo superiore alla pianificazione preventiva. Ad esempio, un modello di pianificazione preventiva può pianificare thread mentre sono IO-bloccati. Ciò consente al nodo (e ad altri strumenti come Ruby's Event Machine e Python's Twisted) di utilizzare meglio i cicli disponibili trascorrendo più tempo a fare lavoro reale e meno a bloccare i tempi.


-1

Il multithreading migliora ancora le prestazioni. La spiegazione originale è idiota in quanto non considera l'esistenza di più core. Nel momento in cui hai più di un core, i thread non sono più thread. Sono hyperthreads. Qualsiasi applicazione ad uso intensivo di thread ne trarrà beneficio più di una singola applicazione thread.


2
Questo non spiega davvero il fervore di Node.JS. Il vantaggio principale di Node.JS è la sua capacità di gestire e inviare rapidamente più richieste da un singolo thread, non di gestire in modo efficace carichi di lavoro pesanti in background, che la risposta non affronta.
Robert Harvey,

Il vantaggio principale di node.js è avere un'unica lingua per front e backend. Tutte queste altre affermazioni sono solo lanugine per far sembrare più importante.
whatsisname

2
La concorrenza a thread singolo con @whatsisname è un vantaggio enorme, molto più grande di avere una sola lingua secondo me.
vieni
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.