У веб-серверах на базі PHP (або Java / ASP.NET / Ruby) кожен запит клієнта інстанціюється в новій темі. Але в Node.js всі клієнти працюють на одній нитці (вони можуть навіть використовувати однакові змінні!) Я розумію, що операції вводу / виводу є подіями, тому вони не блокують контур основного потоку.
Чого я не розумію, ЧОМУ автор Node вибрав його однопоточним? Це ускладнює справи. Наприклад, я не можу запустити інтенсивну функцію процесора, оскільки вона блокує основний потік (а нові запити клієнтів заблоковані), тому мені потрібно нерестовити процес (а це означає, що мені потрібно створити окремий файл JavaScript і виконати інший процес у вузлі це). Однак, у PHP-процесорі інтенсивні завдання не блокують інших клієнтів, оскільки, як я вже згадував, кожен клієнт знаходиться в іншій нитці. Які його переваги порівняно з багатопотоковими веб-серверами?
Примітка. Я використовував кластеризацію, щоб обійти це, але це не дуже.
node -e 'setTimeout(()=>{},1000);' & ps -T h $! | wc -l; kill $!відображає п’ять потоків у моїй системі. Основний цикл подій є однопоточним (це не мало б сенсу, якби не було), але Node є багатопотоковим і ви можете писати багатопотокові однопроцесорні програми, якщо хочете. Я хотів би написати вичерпну відповідь про це, але деякі люди вирішили закрити ваше питання, тому я не можу. Я голосую за його повторне відкриття. Якщо вона отримає більше голосів і знову відкриється, будь ласка, згадайте мене в коментарі.