Confronto tra Node.js a Java è un po 'come paragonare le mele alle arance e più come confrontare un dizionario con un libro di testo di grammatica (grazie scriptin ).
Node.js è un quasi-quadro scritto in JavaScript utilizzando il motore JavaScript V8 di Google per creare il codice JavaScript nel codice macchina nativo che può essere utilizzato lato server (invece di interpretare il codice JS in tempo reale).
Java è un linguaggio (non un framework) a cui un'implementazione del JDK (cioè Oracle JDK e OpenJDK) possono vedere come implementare i costrutti del linguaggio sottostante (thread, I / O, ecc.).
Node.js non ha un modello di threading, cioè non puoi generare un thread direttamente attraverso l'API Node.js. Questo perché utilizza JavaScript (es. ECMAScript ) che non supporta il multi-threading (poiché JavaScript non era originariamente pensato per il server sviluppo laterale). Questo non significa che è non multi-thread. Al contrario, Node.js utilizza un pool di thread per gestire un sacco di I / O asincrono e un sistema di eventi che l'utente (l'utente di Node.js) può collegare (proprio come JavaScript sul client). Quindi come hai detto:
The precise phrasing is - you cannot spawn (or manage) threads in nodejs.
Sì.
can someone please compare these threads to a java environment by comparing their resource consumption on the server
In un ambiente Java, puoi generare thread nel codice utente, ma è necessario notare che i meccanismi sottostanti che generano i thread (cioè il codice JVM C) sono le stesse API di sistema chiamate a creare e gestire i thread in Node.js. In altre parole, entrambi chiameranno pthread_create
per piattaforme POSIX o CreateThread
per Windows. In questo modo, le risorse utilizzate sono le stesse su questo fronte.
Dove questo modello di thread e l'utilizzo delle risorse sono diversi quando un utente vuole creare più di 1 thread; più thread potrebbero significare switch di contesto che possono sostenere risorse aggiuntive. Questo è vero per qualsiasi linguaggio, dato che il threading è un concetto a livello di sistema operativo e non qualcosa di cui un linguaggio ha bisogno di supporto, quindi se (come lo sviluppatore) stai costruendo un'applicazione multi-thread, dovresti (dovresti) essere consapevole di questi avvertimenti e costruisci il tuo codice di conseguenza (ad es. gestisci le risorse / thread in modo tale che l'applicazione abbia il minimo cambiamento di contesto possibile).
Continuando da ciò, dichiari
as I also hear a lot about how nodejs is much less consuming than java.
Questa domanda non può essere risolta direttamente (leggi, facilmente) dal momento che una semplice app Node.js che è stata trasferita su Java (o viceversa) potrebbe portare a un utilizzo variabile delle risorse basato su una serie di fattori diversi e alla fine dovresti fai tu stesso il test per vedere quale sarebbe meglio per quello scenario.
Però, la citazione "meno consumante" probabilmente si riferisce più al fatto che l'esecuzione di un'applet basata su Java richiederebbe la Java Virtual Machine e l'ambiente Java, che fanno consumano quantità considerevoli di risorse (per ragioni diverse) rispetto a Node.js (che funziona come app "nativa"), ma solo perché qualcosa consuma più risorse non significa che sia "peggio". Ed è per questo che dovrebbero essere effettuati test aggiuntivi per confermare.
Spero che possa aiutarti ad aggiungere chiarezza.