Как создать дочерние процессы в Node.js

Kak Sozdat Docernie Processy V Node Js



При программировании в « узел.js », один процесс никогда не сможет справиться с растущей рабочей нагрузкой приложения. Поэтому могут возникнуть определенные ситуации, когда разработчику необходимо создавать новые процессы, работать с долгосрочными задачами и обеспечивать взаимодействие с операционной системой. Этого можно достичь путем создания дочерних процессов, которые будут использовать несколько процессов, тем самым масштабируя приложение Node.

В этой статье объясняется содержание, указанное ниже:







Что такое дочерний процесс?

Дочерний процесс соответствует процессу, созданному с помощью другого процесса, то есть родительского. 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() метод. Эти подходы порождают дочерний процесс, обеспечивают связь между родительским и дочерним процессами или выводят список каталогов в текущем рабочем каталоге (напрямую или через создание целевого исполняемого файла) соответственно.