Cách tạo các tiến trình con trong Node.js

Cach Tao Cac Tien Trinh Con Trong Node Js



Trong khi lập trình trong “ nút.js ”, một quy trình đơn lẻ không bao giờ hiệu quả để giải quyết khối lượng công việc ngày càng tăng của ứng dụng. Do đó, có thể có một số tình huống nhất định mà nhà phát triển cần tạo quy trình mới, làm việc với các tác vụ dài hạn và cho phép tương tác với hệ điều hành. Điều này có thể đạt được bằng cách tạo các tiến trình con để sử dụng nhiều tiến trình, từ đó mở rộng quy mô ứng dụng Node.

Bài viết này giải thích nội dung được liệt kê dưới đây:







Tiến trình con là gì?

Một tiến trình con tương ứng với một tiến trình được tạo thông qua một tiến trình khác, tức là tiến trình cha. Node.js cung cấp “ tiến trình con ” mô-đun đảm bảo giao tiếp hiệu quả giữa các tiến trình con. Ngoài ra, mô-đun này hỗ trợ gọi các tính năng của hệ điều hành bằng cách thực thi bất kỳ lệnh hệ thống nào trong một tiến trình con.



Làm cách nào để tạo các tiến trình con trong Node.js?

Trẻ xử lý trong “ nút.js ” có thể được tạo thông qua các phương pháp nêu dưới đây:



  • sinh sản() ' Phương pháp.
  • cái nĩa() ' Phương pháp.
  • thực thi() ' Phương pháp.
  • execFile() ' Phương pháp.

Cách tiếp cận 1: Tạo các tiến trình con trong node.js thông qua phương thức “spawn()”

Các ' sinh sản() ” tạo ra một lệnh ghép ngắn trong một quy trình mới bằng cách sử dụng lệnh ghép ngắn được cung cấp và các đối số dòng lệnh. Phiên bản ChildProcess áp dụng/triển khai API EventEuctor cho phép đăng ký trình xử lý sự kiện trên các đối tượng con. Những sự kiện này bao gồm thoát, ngắt kết nối, lỗi, thông báo và đóng.





Cú pháp

child_process. sinh sản ( lệnh ghép ngắn [ , lập luận ] [ , tùy chọn ] )

Trong cú pháp này:



  • lệnh ghép ngắn: Phải mất một chuỗi là lệnh ghép ngắn để thực thi.
  • lập luận: Nó đề cập đến danh sách đối số chuỗi. Giá trị mặc định là một mảng null.
  • Các ' tùy chọn ” có thể là một “lớp vỏ” nhận giá trị Boolean. Nó là như vậy nếu là “ ĐÚNG VẬY ”, lệnh ghép ngắn được thực thi từ bên trong shell. Giá trị mặc định là “ SAI ” có nghĩa là không có vỏ. Theo mặc định, “ sinh sản() ” không tạo/tạo shell để chạy lệnh ghép ngắn, do đó, điều quan trọng là phải chuyển nó dưới dạng “tùy chọn” trong khi truy cập tiến trình con.

Giá trị trả về: Phương thức này lấy ra một đối tượng ChildProcess.

Sau đây là minh họa việc tạo một tiến trình con:

hằng số { sinh sản } = yêu cầu ( 'con_process' ) ;

hằng số đứa trẻ = sinh sản ( 'Bạn' , [ 'Đ: \S ETUPS' ] , { vỏ bọc : ĐÚNG VẬY } ) ;

đứa trẻ. thiết bị xuất chuẩn . TRÊN ( 'dữ liệu' , ( dữ liệu ) => {

bảng điều khiển. nhật ký ( `thiết bị xuất chuẩn : $ { dữ liệu } ` ) ;

} ) ;

đứa trẻ. lỗi chuẩn . TRÊN ( 'dữ liệu' , ( dữ liệu ) => {

bảng điều khiển. lỗi ( `stderr : $ { dữ liệu } ` ) ;

} ) ;

đứa trẻ. TRÊN ( 'đóng' , ( mã số ) => {

bảng điều khiển. nhật ký ( `tiến trình con đã thoát với mã $ { mã số } ` ) ;

} ) ;

Trong khối mã này:

  • Trước hết, hãy bao gồm “ tiến trình con ” mô-đun để tạo một tiến trình con.
  • Sau đó, sinh ra một tiến trình con để hiển thị nội dung trong đường dẫn đã chỉ định, tức là “ D:\CÀI ĐẶT ”.
  • Cuối cùng, “ đóng ” Sự kiện được gọi khi toàn bộ tiến trình con được thoát và thông báo thoát được hiển thị trên bảng điều khiển.

đầu ra

Tại đây, hãy thực thi lệnh ghép ngắn sau để chạy mã và hiển thị nội dung trong đường dẫn đích:

nhiệt độ nút js

Cách tiếp cận 2: Tạo các tiến trình con trong node.js bằng phương thức “fork()”

Phương pháp này gắn liền với “ sinh sản() ” phương thức trong đó việc giao tiếp giữa tiến trình con và tiến trình cha có thể được thực hiện thông qua “ gửi() ' phương pháp.

Các ' cái nĩa() ” phương thức tách các tác vụ tính toán phức tạp khỏi vòng lặp sự kiện (chính). Phương pháp này có thể được sử dụng để truy cập nhiều tiến trình con nhưng nó có thể ảnh hưởng đến hiệu suất tổng thể vì mỗi tiến trình có bộ nhớ riêng.

Cú pháp

child_process. cái nĩa ( mdpath [ , lập luận ] [ , tùy chọn ] )

Theo cú pháp này:

  • mdpath ” lấy một chuỗi đại diện cho mô-đun để thực thi ở phần tử con.
  • lập luận ” đề cập đến danh sách đối số chuỗi.
  • tùy chọn ” có thể là “execPath”, “env”, “CWD”, “tách rời” và “execArgv”.

Giá trị trả về: Phương thức này lấy một cá thể ChildProcess.

Mã (Quy trình gốc)

Bây giờ, hãy xem qua khối mã dưới đây để cho phép giao tiếp giữa các tiến trình cha và con với sự trợ giúp của “ gửi() ' phương pháp:

hằng số cp = yêu cầu ( 'con_process' ) ;

hãy để con = cp. cái nĩa ( __tên dir + '/fork2.js' ) ;

đứa trẻ. TRÊN ( 'tin nhắn' , chức năng ( x ) {

bảng điều khiển. nhật ký ( 'Quy trình gốc đã nhận được:' , x ) ;

} ) ;

đứa trẻ. gửi ( { Xin chào : 'từ tiến trình cha' } ) ;

đứa trẻ. TRÊN ( 'đóng' , ( mã số ) => {

bảng điều khiển. nhật ký ( `tiến trình con đã thoát với mã $ { mã số } ` ) ;

} ) ;

Trong mã này:

  • Tương tự như vậy, hãy kết hợp “ tiến trình con ” mô-đun để tạo một tiến trình con.
  • Bây giờ, chỉ định đường dẫn của tiến trình con thông qua “ cái nĩa() ' phương pháp.
  • Cuối cùng, hiển thị thông báo đại diện cho tiến trình gốc thông qua “ gửi() ” và hiển thị (các) lỗi gặp phải nếu có.

Mã (Quy trình con)

Tệp mã sau đây, tức là, “ fork2.js ” đại diện cho tiến trình con cũng gửi tin nhắn bằng cách sử dụng “ gửi() ” phương pháp như sau:

quá trình. TRÊN ( 'tin nhắn' , chức năng ( tôi ) {

bảng điều khiển. nhật ký ( 'Tiến trình con có:' , tôi ) ;

} ) ;

quá trình. gửi ( { Xin chào : 'từ tiến trình con' } ) ;

đầu ra

Bây giờ, hãy chạy lệnh ghép ngắn dưới đây để thực thi mã:

nút ngã ba. js

Từ kết quả đầu ra này, có thể xác nhận rằng quá trình giao tiếp giữa tiến trình cha và con được thực hiện một cách thích hợp.

Cách tiếp cận 3: Tạo các tiến trình con trong node.js bằng phương thức “exec()”

Các ' thực thi() ” trước tiên, phương thức này tạo một shell và sau đó chạy lệnh ghép ngắn. Phương pháp này sẽ được sử dụng để lấy tổng số thư mục.

Cú pháp

child_process. người điều hành ( lệnh ghép ngắn [ , tùy chọn ] [ , gọi lại ] )

Trong cú pháp đã cho:

  • lệnh ghép ngắn ” lấy một chuỗi đại diện cho lệnh thực thi với các đối số được phân tách bằng dấu cách.
  • Các ' tùy chọn ” bao gồm “cwd”, “encoding”, “shell”, v.v.
  • Các ' gọi lại ” được gọi khi quá trình/thao tác kết thúc.

Giá trị trả về

Phương thức này lấy một cá thể ChildProcess.

Bây giờ, chuyển sang mã liệt kê số lượng thư mục:

hằng số { người điều hành } = yêu cầu ( 'con_process' ) ;
người điều hành ( 'thư mục | tìm /c /v ''' , ( lỗi, thiết bị xuất chuẩn, thiết bị xuất chuẩn ) => {
nếu như ( lỗi ) {
bảng điều khiển. lỗi ( `lỗi thực thi : $ { lỗi } ` ) ;
trở lại ;
}
bảng điều khiển. nhật ký ( `thiết bị xuất chuẩn : Con số của thư mục -> $ { thiết bị xuất chuẩn } ` ) ;
nếu như ( lỗi chuẩn != '' )
bảng điều khiển. lỗi ( `stderr : $ { lỗi chuẩn } ` ) ;
} ) ;

Trong đoạn mã này, hãy bao gồm “ tiến trình con ” để tạo/tạo các tiến trình con. Sau đó, xử lý các ngoại lệ/lỗi gặp phải và hiển thị tổng số thư mục trong thư mục làm việc hiện tại.

đầu ra

Thực thi đoạn mã sau để chạy mã:

nút thực thi. js

Trong kết quả đầu ra này, có thể ngụ ý rằng tổng số thư mục trong thư mục làm việc hiện tại được hiển thị.

Cách tiếp cận 4: Tạo các tiến trình con trong node.js bằng phương thức execFile()

Bên trong ' execFile() ”, tệp thực thi đích được sinh ra trực tiếp dưới dạng một quy trình mới, do đó nó hiệu quả hơn phương thức “ thực thi() ' phương pháp. Phương thức này sinh ra “ execchild.js ” dưới dạng một quy trình mới.

Cú pháp

child_process. tập tin thực thi ( tên tập tin [ , lập luận ] [ , tùy chọn ] [ , gọi lại ] )

Trong cú pháp đã cho:

  • tên tập tin ” lấy một chuỗi đại diện cho tên hoặc đường dẫn của tệp để thực thi.
  • lập luận ” tương ứng với danh sách đối số chuỗi.
  • Các ' tùy chọn ” bao gồm “cwd”, “encoding”, “shell”, v.v.
  • Các ' gọi lại ” Hàm được gọi khi quá trình kết thúc. Các đối số của hàm có thể là lỗi, thiết bị xuất chuẩn, v.v.

Giá trị trả về

Phương thức này cũng truy xuất một cá thể ChildProcess.

Bây giờ, hãy xem xét đoạn mã sau tạo ra tệp thực thi đích dưới dạng một quy trình mới:

hằng số { tập tin thực thi } = yêu cầu ( 'con_process' ) ;
hằng số x = tập tin thực thi ( 'nút' , [ 'execchild.js' ] ,
( lỗi, thiết bị xuất chuẩn, thiết bị xuất chuẩn ) => {
nếu như ( lỗi ) {
ném lỗi ;
}
bảng điều khiển. nhật ký ( thiết bị xuất chuẩn ) ;
} ) ;

Dựa trên các dòng mã này, hãy áp dụng các bước sau:

  • Lặp lại quy trình đã thảo luận để bao gồm “ tiến trình con ” mô-đun.
  • Trong bước tiếp theo, hãy áp dụng “ execFile() ” tạo ra tệp thực thi được chỉ định (đã thảo luận trong cách tiếp cận trước đó) dưới dạng một quy trình mới, từ đó liệt kê tổng số thư mục trong thư mục làm việc.

đầu ra

Thực thi lệnh ghép ngắn bên dưới để chạy mã:

tập tin thực thi nút. js

Trong kết quả này, có thể xác minh rằng tệp thực thi được chỉ định đã được tạo ra và số lượng thư mục được hiển thị.

Phần kết luận

Các tiến trình con trong Node.js có thể được tạo thông qua “ sinh sản() “ phương pháp, phương pháp “ cái nĩa() “ phương pháp, phương pháp “ thực thi() ” phương thức hoặc phương thức “ execFile() ' phương pháp. Các cách tiếp cận này sinh ra tiến trình con, cho phép giao tiếp tiến trình cha-con hoặc liệt kê các thư mục trong thư mục làm việc hiện tại (trực tiếp hoặc thông qua việc tạo ra tệp thực thi đích), tương ứng.