При программировании в « узел.js », один процесс никогда не сможет справиться с растущей рабочей нагрузкой приложения. Поэтому могут возникнуть определенные ситуации, когда разработчику необходимо создавать новые процессы, работать с долгосрочными задачами и обеспечивать взаимодействие с операционной системой. Этого можно достичь путем создания дочерних процессов, которые будут использовать несколько процессов, тем самым масштабируя приложение Node.
В этой статье объясняется содержание, указанное ниже:
- Что такое дочерний процесс?
- Как создать дочерние процессы в Node.js?
- Создание дочерних процессов в node.js с помощью « порождать() «Метод.
- Создание дочерних процессов в node.js с использованием « вилка() «Метод.
- Создание дочерних процессов в node.js с использованием « исполнитель () «Метод.
- Создание дочерних процессов в node.js с использованием « execFile() «Метод.
Что такое дочерний процесс?
Дочерний процесс соответствует процессу, созданному с помощью другого процесса, то есть родительского. Node.js предоставляет « дочерний_процесс », который обеспечивает эффективную связь между дочерними процессами. Кроме того, этот модуль помогает вызывать функции операционной системы путем выполнения любой системной команды в дочернем процессе.
Как создать дочерние процессы в Node.js?
Ребенок обрабатывает в « узел.js »может быть создано с помощью следующих подходов:
- « порождать() «Метод.
- « вилка() «Метод.
- « исполнитель () «Метод.
- « execFile() «Метод.
Подход 1: Создание дочерних процессов в node.js с помощью метода spawn()
« порождать() Метод «генерирует командлет в новом процессе, используя предоставленный командлет и аргументы командной строки. Экземпляр ChildProcess применяет/реализует API EventEmitter, который позволяет регистрировать обработчики событий на дочерних объектах. К этим событиям относятся выход, отключение, ошибка, сообщение и закрытие.
Синтаксис
дочерний_процесс. порождать ( командлет [ , аргументы ] [ , параметры ] )В этом синтаксисе:
- командлет: Требуется строка, которая является командлетом для выполнения.
- аргументы: Он относится к списку строковых аргументов. Значением по умолчанию является нулевой массив.
- « параметры может быть «оболочкой», принимающей логическое значение. Это так, что если это « истинный », командлет выполняется изнутри оболочки. Значение по умолчанию: « ЛОЖЬ », что подразумевает отсутствие оболочки. По умолчанию, ' порождать() ” не создает/генерирует оболочку для запуска командлета, поэтому крайне важно передать его как “опцию” при доступе к дочернему процессу.
Возвращаемое значение: Этот метод извлекает объект ChildProcess.
Ниже приведена демонстрация создания дочернего процесса:
константа { порождать } '=' требовать ( 'дочерний_процесс' ) ;константа ребенок '=' порождать ( 'ты' , [ 'Д: \С ЭТУПС' ] , { оболочка : истинный } ) ;
ребенок. стандартный вывод . на ( 'данные' , ( данные ) => {
консоль. бревно ( `stdout : $ { данные } ` ) ;
} ) ;
ребенок. stderr . на ( 'данные' , ( данные ) => {
консоль. ошибка ( `stderr : $ { данные } ` ) ;
} ) ;
ребенок. на ( 'закрывать' , ( код ) => {
консоль. бревно ( `дочерний процесс завершился с кодом $ { код } ` ) ;
} ) ;
В этом блоке кода:
- Прежде всего, включите « дочерний_процесс » модуль для создания дочернего процесса.
- После этого создайте дочерний процесс для отображения содержимого по указанному пути, т. е. « Д:\НАСТРОЙКИ ».
- Наконец, « закрывать Событие вызывается, когда весь дочерний процесс завершается, и сообщение о выходе отображается на консоли.
Выход
Здесь выполните следующий командлет, чтобы запустить код и отобразить содержимое по целевому пути:
температура узла. js
Подход 2: Создание дочерних процессов в node.js с помощью метода fork()
Этот метод связан с « порождать() ” метод, при котором связь между дочерним и родительским процессами может осуществляться через метод “ отправлять() метод.
« вилка() ” отделяет сложные вычислительные задачи от цикла событий (основного). Этот метод можно использовать для доступа к нескольким дочерним процессам, но он может повлиять на общую производительность, поскольку каждый процесс имеет собственную память.
Синтаксис
дочерний_процесс. вилка ( mdpath [ , аргументы ] [ , параметры ] )Согласно этому синтаксису:
- « mdpath ” принимает строку, представляющую модуль, который будет выполняться в дочернем элементе.
- « аргументы ” относится к списку строковых аргументов.
- « параметры » может быть «execPath», «env», «CWD», «detached» и «execArgv».
Возвращаемое значение: Этот метод извлекает экземпляр ChildProcess.
Код (родительский процесс)
Теперь просмотрите приведенный ниже блок кода, который обеспечивает связь между родительским и дочерним процессами с помощью « отправлять() » метод:
константа КП '=' требовать ( 'дочерний_процесс' ) ;пусть ребенок '=' ср. вилка ( __имя_каталога + '/fork2.js' ) ;
ребенок. на ( 'сообщение' , функция ( Икс ) {
консоль. бревно ( «Родительский процесс получил:» , Икс ) ;
} ) ;
ребенок. отправлять ( { привет : 'из родительского процесса' } ) ;
ребенок. на ( 'закрывать' , ( код ) => {
консоль. бревно ( `дочерний процесс завершился с кодом $ { код } ` ) ;
} ) ;
В этом коде:
- Аналогичным образом включите « дочерний_процесс » модуль для создания дочернего процесса.
- Теперь укажите путь дочернего процесса через параметр « вилка() метод.
- Наконец, отобразите сообщение, представляющее родительский процесс, через « отправлять() » и отобразить обнаруженные ошибки, если таковые имеются.
Код (дочерний процесс)
Следующий файл кода, т.е. « fork2.js » представляет дочерний процесс, который также отправляет сообщение, используя « отправлять() метод следующим образом:
процесс. на ( 'сообщение' , функция ( м ) {консоль. бревно ( 'Дочерний процесс получил:' , м ) ;
} ) ;
процесс. отправлять ( { привет : 'из дочернего процесса' } ) ;
Выход
Теперь запустите приведенный ниже командлет, чтобы выполнить код:
узел forkchild. js
Эти выходные данные подтверждают, что связь между родительским и дочерним процессами осуществляется надлежащим образом.
Подход 3: Создание дочерних процессов в node.js с использованием метода exec()
« исполнитель () ” сначала создает оболочку, а затем запускает командлет. Этот метод будет использоваться для получения всех каталогов.
Синтаксис
дочерний_процесс. руководитель ( командлет [ , параметры ] [ , перезвонить ] )В данном синтаксисе:
- « командлет ” принимает строку, представляющую команду для выполнения, с аргументами, разделенными пробелами.
- « параметры » включают «cwd», «кодирование», «оболочку» и т. д.
- « перезвонить Функция вызывается, когда процесс/операция завершается.
Возвращаемое значение
Этот метод извлекает экземпляр ChildProcess.
Теперь перейдем к коду, в котором указано количество каталогов:
константа { руководитель } '=' требовать ( 'дочерний_процесс' ) ;руководитель ( 'режиссер | найти /c /v ''' , ( ошибка, стандартный вывод, стандартный вывод ) => {
если ( ошибка ) {
консоль. ошибка ( `ошибка выполнения : $ { ошибка } ` ) ;
возвращаться ;
}
консоль. бревно ( `stdout : Число каталогов -> $ { стандартный вывод } ` ) ;
если ( stderr '=' '' )
консоль. ошибка ( `stderr : $ { stderr } ` ) ;
} ) ;
В этот фрагмент кода включите « дочерний_процесс »модуль для создания/создания дочерних процессов. После этого справиться с возникшими исключениями/ошибками и вывести общее количество каталогов в текущем рабочем каталоге.
Выход
Выполните следующий код для запуска кода:
узел execchild. js
В этом выводе можно подразумевать, что отображаются все каталоги в текущем рабочем каталоге.
Подход 4: Создание дочерних процессов в node.js с помощью метода execFile()
В ' execFile() ” целевой исполняемый файл создается непосредственно в виде нового процесса, поэтому он более эффективен, чем метод “ исполнитель () метод. Этот метод порождает созданный « execchild.js ” в виде нового процесса.
Синтаксис
дочерний_процесс. execFile ( имя файла [ , аргументы ] [ , параметры ] [ , перезвонить ] )В данном синтаксисе:
- « имя файла ” принимает строку, представляющую имя файла или путь для выполнения.
- « аргументы соответствует списку строковых аргументов.
- « параметры » включают «cwd», «кодирование», «оболочку» и т. д.
- « перезвонить Функция вызывается, когда процесс завершается. Аргументами функции могут быть error, stdout и т. д.
Возвращаемое значение
Этот метод также получает экземпляр ChildProcess.
Теперь рассмотрим следующий код, который порождает целевой исполняемый файл как новый процесс:
константа { execFile } '=' требовать ( 'дочерний_процесс' ) ;константа Икс '=' execFile ( 'узел' , [ 'execchild.js' ] ,
( ошибка, стандартный вывод, стандартный вывод ) => {
если ( ошибка ) {
бросать ошибка ;
}
консоль. бревно ( стандартный вывод ) ;
} ) ;
На основе этих строк кода выполните следующие шаги:
- Повторите описанную процедуру для включения « дочерний_процесс » модуль.
- На следующем шаге примените « execFile() », который порождает указанный исполняемый файл (обсуждаемый в предыдущем подходе) как новый процесс, тем самым перечисляя все каталоги в рабочем каталоге.
Выход
Выполните приведенный ниже командлет для запуска кода:
исполнительный файл узла. js
В результате можно убедиться, что указанный исполняемый файл создан и отображается количество каталогов.
Заключение
Дочерние процессы в Node.js можно создать с помощью « порождать() метод, метод « вилка() метод, метод « исполнитель () метод или метод « execFile() метод. Эти подходы порождают дочерний процесс, обеспечивают связь между родительским и дочерним процессами или выводят список каталогов в текущем рабочем каталоге (напрямую или через создание целевого исполняемого файла) соответственно.