2013-07-29 5 views
0

Я знаю, что при выполнении операций ввода-вывода nodejs выполняет работу в отдельном потоке, поэтому не может поток запустить в другом ядре? если да, то разве не только один процесс nodejs может использовать два ядра?Почему я должен запускать два или более экземпляра nodejs, когда я хочу хорошо использовать многоядерный процессор?

+0

Я бы отредактировал ваш вопрос, чтобы сделать его более понятным, но я не уверен, что вы просите быть честным. Если вы исправите заголовок, это поможет вам быстрее получить ответ :) – FraserK

+0

Что-то вводило вас в заблуждение. Node.js - многопоточный движок. Читайте внимательно ознакомление здесь http://nodejs.org/about/. – cababunga

ответ

0

Узел делает асинхронный ввод-вывод, но ввод-вывод очень мало «работает» с точки зрения процессора. В основном это ожидание того, что ОС будет готова к обработке данных. Таким образом, процесс с одним узлом будет использовать только 1 процессорное ядро ​​для фактической логики в самой программе вашего узла. Если вы максимизируете это ядро ​​процессора и хотите, чтобы еще одна логика вашей реальной программы выполнялась одновременно, вам нужен другой процесс. Да, есть технически несколько нитей, используемых какой-либо узловой программой, но только один из них - это интенсивный процессор, который фактически интерпретирует ваш javascript.

Это в основном ждет, когда ОС будет готова к обработке данных. Таким образом, процесс с единственным узлом будет использовать только 1 ядро ​​ЦП для фактической логики самой программы узла. Зачем?

Это по дизайну. Сделав этот особый выбор, узловые программы не должны иметь дело с сложными и подверженными ошибкам параллельными идиомами программирования, такими как потоки, семафоры, блокировки, взаимоблокировки и т. Д. Это всего лишь один из вариантов решения этой сложности. Он основан на двух основных наблюдениях: 1. Асинхронный ввод-вывод, по-видимому, в настоящее время рассматривается как наиболее эффективный и управляемый дизайн для высококонкурентных систем и 2. Большинство других идиом программирования для параллелизма относительно сложнее правильно кодировать. Это именно то, что выбрал node.js. Например, язык «go» сделал другой набор вариантов, благоприятствующих другим идиомам, которые позволяют многопоточность, блокирование, каналы, очередность сообщений и т. Д. Следовательно, программы go лучше используют многоядерные машины.

+0

** В большинстве случаев ожидается, что ОС будет готова к обработке данных. Таким образом, процесс с одним узлом будет использовать только 1 ядро ​​ЦП для фактической логики в самой программе вашего узла. ** Почему? –

+0

См. Мой обновленный ответ. –

Смежные вопросы