Durante il tentativo di riflettere sul perché si vorrebbe conoscere questo tipo di informazioni, credo di aver capito il nucleo della vostra confusione. Nota che un processo può cambiare core più volte al millisecondo. Il sistema operativo fa un ottimo lavoro di pianificazione di questo, e non posso immaginare che le prestazioni siano un problema di cui dovresti migliorare (perché in questo caso dovresti scrivere il tuo livello OS e non nel nodo). Non ci sarà assolutamente alcun ritardo osservabile tra un processo che gira su un core e che deve essere avviato su quel core, tranne eventualmente su hardware embedded con un sistema operativo personalizzato.
Si noti che i sistemi moderni possono anche attivare e disattivare i nuclei. Quindi immagina un server web con 2 core e 2 processi di nodo che servono le richieste. Di notte, quando non c'è molto lavoro, il sistema operativo spegne il core 2 e entrambi i processi funzionano felicemente sia sul core 1, sia su richiesta occasionale. Quindi, quando diventa più impegnativo, il sistema operativo avvia il secondo core e la maggior parte delle volte i due processi del nodo verranno eseguiti contemporaneamente, ciascuno sul proprio core. Tuttavia, si noti che il sistema operativo ha anche molti altri processi (ad esempio, l'aggiornamento dell'orologio in tempo reale). Quindi potrebbe benissimo essere che ad un certo punto il processo A del nodo viene eseguito sul core 1 e il processo B sul nodo 2. Quindi il core 1 viene utilizzato per aggiornare l'orologio, mentre il core 2 è ancora in esecuzione B. A metà l'aggiornamento dell'orologio comunque il processo B viene arrestato sul core 2 e il processo A viene avviato lì. Al termine dell'aggiornamento dell'ora, il processo B viene riavviato sul core 1. Tutto ciò avviene in meno di un microsecondo.
Quindi gli switch di contesto avvengono milioni di volte al secondo su architetture moderne, non preoccuparti di loro. Anche se a un certo punto si scopre che i processi a 2 nodi sono eseguiti su core diversi, non è garantito che questo sia ancora vero un microsecondo dopo. E, di nuovo, probabilmente il sistema operativo farà un lavoro molto migliore per l'ottimizzazione di te.
Ora una cosa che potrebbe interessarti, è sapere se non per qualche motivo i due processi SEMPRE vengono eseguiti sullo stesso core (ad es.perché segretamente non sono due processi, ma un processo, come richieste diverse allo stesso server nodo). Questo è qualcosa che devi controllare solo una volta. Basta caricare completamente entrambe le istanze del nodo e controllare top/process explorer/etc se il loro utilizzo combinato della CPU è superiore al 100%. In tal caso, si può presumere che siano almeno in grado di girare su diversi core e supporre inoltre che il sistema operativo li pianifichi su core diversi se ne trarrebbero vantaggio.
bene, la seguente dichiarazione è solo una congettura, ma forse c'è una piscina di CPU disponibili per eseguire un processo e si può dettare quali piscina iis disponibile quale processo? Forse puoi parlare del modo in cui il modulo del nucleo principale di Node.js si adatta a quello che stai dicendo. –
No. La pianificazione delle processess (o dei thread) è una competenza esclusiva del sistema operativo. Puoi chiedergli di creare un nuovo processo (o thread), ma non puoi decidere su quali processori fisici lo eseguiranno. Non sono sicuro di poter essere confuso con il pool di thread Node che, in effetti, è un pool di ** thread ** dedicato a partecipare simultaneamente alle operazioni asincrone. Vedi http://www.future-processing.pl/blog/on-problems-with-threads-in-node-js/ – bitifet
grazie, come posso accedere al pool di thread Node.js da un processo node.js? –