Domanda

Ho due domande noob:

1) Perché node.js viene eseguito in un singolo thread? Perché non usa solo il processo stesso? O quali sono i vantaggi di eseguirlo in un thread anziché in processo?

2) Cosa succede se un thread in un processo si è schiantato (sono consapevole che un'eccezione non gestita non causerà l'uscita del processo), ma cosa succede se è correttamente catturato? o con eccezioni come le eccezioni di punta mobile. Anche il processo si arresta in modo anomalo?

È stato utile?

Soluzione

Penso che tu sia un po 'confuso su cosa significhi "filo singolo" in questo caso. Lo stesso node.js utilizza più thread sullo sfondo per gestire le chiamate altrimenti bloccanti in modo asincrono.

Node.js Core, il motore JavaScript, è singolo. La mancanza di threading multiplo e la disponibilità di un ciclo di eventi rendono la programmazione molto più semplice. In breve, non devi affrontare tutti i problemi di concorrenza che il multi threading porta con sé il tuo codice è molto più deterministico in questo modo.

Nel caso in cui un thread si blocchi è completamente irrilevante se questo fosse l'unico o uno dei tanti, se il codice si blocca la cosa migliore che puoi sperare è che il programma muoia con esso, nulla sarebbe più problematico che far funzionare il programma che continua a correre stato parzialmente corrotto. Immagina il thread che si arresta in modo responsabile del salvataggio dei dati su disco e ora il programma continua a funzionare senza mai risparmiare di nuovo.

Altri suggerimenti

  1. Node.js è progettato per essere estremamente leggero e viene chiamato solo quando necessario. Quindi ogni thread gestisce una richiesta quindi esce. Se chiami /mypage, node.js elaborerà la richiesta e quindi terminerà. Ciò si traduce in prestazioni migliori mantenendo una piccola impronta
  2. Se c'è un'eccezione ed è gestita correttamente, allora lancerà un errore in base a come l'hai definito. JavaScript è tutto o niente di linguaggio. Qualsiasi errore farà sì che JavaScript lanci un errore e si blocca, ecco perché devi assicurarti di gestire tutti i possibili errori.

L'esecuzione di un programma in un processo o un singolo thread è la stessa cosa. Ogni processo ha un thread principale. A seconda del linguaggio di programmazione e della piattaforma, è possibile utilizzare thread aggiuntivi per eseguire parti del programma contemporaneamente. Node.js non ha la possibilità di avviare thread aggiuntivi.

In questo modo, non hai la possibilità di eseguire pezzi del tuo programma in parallelo oltre ad avviare nuovi processi. Più thread in un singolo processo condividono la stessa memoria, mentre i processi non lo fanno. Quando è necessario condividere informazioni tra i processi, è necessario utilizzare il passaggio dei messaggi.

Lo svantaggio del passaggio dei messaggi è che è più lento della condivisione di informazioni attraverso la memoria. Il vantaggio è che non devi ragionare sullo stato mutabile degli oggetti nella tua memoria e su come garantire che tali oggetti non diventino incoerenti.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top