Вопрос про многопоточность и работу ядер процессора и nodejs?
===============================================================

 Здравствуйте!   

Помогите, пожалуйста, внести ясность и понять, как именно работает современный многоядерный процессор.  

Допустим, есть скрипт, который на сервере работает. Раньше, когда ядро у процессора было одно, все было ясно - процессор обрабатывает скрипт в один поток последовательно.  

Затем появились многоядерные процессоры, которые могут распараллеливать и одновременно выполнять несколько скриптов (каждое ядро независимо от других может что-то выполнять).  

Тут же появились языки программирования и инструменты, которые умеют работать с многопоточностью. Если представить очень грубо, то работа заключается в умении"раздавать" задачи нескольким ядрам, а затем собирать результат работы каждого ядра и "склеивать" его в конечный результат. Например, если скрипт состоит из четырех сложных вычислений, каждое их которых занимает 1 секунду, то одноядерный процессор выполнял бы эти вычисления по очереди и всего потратил бы 4 секунды. А четырехядерный процессор возьмет по одному вычислению на каждое ядро, параллельно выполнит все 4 расчета за 1 секунду и отдаст результат за 1 секунду. Ну это если очень грубо представить.  

С этим все более-менее понятно. Но выше речь шла об умении ЯП задействовать ядра процессора на усмотрение программиста, который пишет программу. А как будет происходить работа в следующем случае:  

Я пишу скрипт на nodejs + websocket. Это будет онлайн-чат. Один человек пишет сообщение, другой его получает и тд. Будут ли в этом случае задействованы все ядра процессора? Если да, то как? Nodejs из коробки запускается и задействует все ядра?  

Если я проведу аналогию с PHP (а больше я, к сожалению, ни с чем пока не работал), то в PHP скрипт каждый раз "запускается" и "умирает". У него нет состояния. Пришел запрос от пользователья - запустился скрипт, подключился к базе, записал туда что-нибудь и умер. Поэтому каждый новый запрос может брать на себя другое ядро. А в nodejs есть это самое "состояние". То есть программа запущена и данные одни на всех.  

```
let users: [];
let messages: [];

ws.on('connection', socket=> {
    users.push(socket);
  
    socket.on('message', message => {
        messages.push(message);

        users.forEach(user => user.emit('message', message));
    });
});
```
  

  

Как в этом случае запросы будут обрабатываться параллельно? Они ведь работают с одними и теми же данными.  

Объясните, пожалуйста. 

<https://nodejs.org/api/worker_threads.html> По хорошему нода равномерно распределяет задачи по ядрам. Но ваша задача грамотно использовать это.