Child process trong Node.js là gì?

Blog / Tin công nghệ 09/10/2023
child-process-trong-nodejs-la-gi
Phụ lục

Node.js là một môi trường chạy mã JavaScript trên máy chủ (server-side) rất mạnh mẽ, nhưng có lúc bạn cần thực hiện nhiều nhiệm vụ song song hoặc tương tác với các tiến trình ngoại vi, và đó là lúc Child Process (Tiến trình con) trong Node.js xuất hiện.

Child process là gì?

Child process là một module của Node.js cho phép tạo ra các tiến trình con (process) độc lập để thực hiện các tác vụ cụ thể. Nó cho phép Node.js chạy nhiều tác vụ đồng thời và tận dụng tối đa sức mạnh của máy chủ. Khi tạo ra một child process, nó sẽ chạy độc lập với parent process (tiến trình cha) và có thể giao tiếp với cha qua luồng (stream), các sự kiện (event)… Các child process được tạo ra có tài nguyên độc lập, giúp giảm thiểu tác động đến các tiến trình khác khi xử lý tác vụ nặng hoặc chẳng may bị lỗi.

Vấn đề

Có một lời khuyên mà chắc hẳn ai làm việc với Node.js đều phải thuộc lòng đó là “đừng bao giờ chặn vòng lặp sự kiện”. Chặn ở đây có nghĩa là không để cho Event Loop được thực thi chức năng vốn có của nó. Node.js chỉ có một luồng để xử lý mã JavaScript, nếu một công việc chiếm tương đối thời gian để xử lý thì nó sẽ gây ra một cuộc tắc nghẽn nghiêm trọng trong luồng chính. Hay nói cách khác, tất cả cuộc gọi API có thể sẽ không bao giờ được phản hồi cho đến khi công việc đó xong.

Biết được vấn đề, tất nhiên Node.js phải cung cấp cho chúng ta một số cách để giải quyết. Thay vì gọi những hàm đồng bộ thì hãy chuyển qua gọi hàm bất đồng bộ, ví dụ như cùng là đọc file nhưng readFile sẽ được khuyên dùng hơn readFileSync bởi vì readFile là hàm bất đồng bộ. Ngoài ra, nếu công việc đòi hỏi khả năng tính toán cao của CPU như xử lý hình ảnh, video… thì có một giải pháp khác là sử dụng module child_process được tích hợp trong Node.

Có thể nói child_process là giải pháp sớm nhất mà Node.js đưa ra, sau này chúng ta có thêm module worker_threads cũng có khả năng giải quyết được vấn đề chặn vòng lặp sự kiện. Tôi đã có một bài về Worker threads là gì? Bạn đã biết khi nào thì sử dụng Worker threads trong node.js chưa?, bạn đọc có thể tham khảo thêm về khái niệm cũng như cách dùng nó. Nhưng trong phạm vi bài viết này, chúng ta hãy tạm quên đi Worker threads và tập trung vào xem Child process là gì và nó được sử dụng như thế nào nhé.

Cho dễ hình dung, một ứng dụng Node.js khi khởi động thì nó là một process với một bộ V8 Engine được tạo ra. Để ngăn vòng lặp sự kiện bị chặn, cách tốt nhất là tạo ra một tiến trình khác để xử lý. Khi đó, nó có thể chạy độc lập với tiến trình cha, xử lý rồi trả lại kết quả cho tiến trình cha thông qua một kênh giao tiếp như đã kể đến ở bên trên.

Tùy thuộc vào cách child process được tạo ra mà nó có cách thực hiện nhiệm vụ khác nhau. Có hai cách phổ biến để tạo ra child process là spawn và fork. Trong khi fork cố gắng tạo ra một "bản sao" của process cha, có nghĩa là "clone" ra một V8 Engine để xử lý tác vụ thì spawn lại chỉ đơn giản là tạo ra một process thực hiện câu lệnh nào đó. Chi tiết hơn, chúng ta hãy đi qua từng phương thức xem chúng thực chất là như thế nào.

spawn

spawn là một phương thức để tạo ra một child process mới. Khi sử dụng spawn, ta có thể truyền cho child process các tham số, tùy chọn và đối số cần thiết để thực thi lệnh hoặc file thực thi

fork

fork cũng là một phương thức để tạo ra một child process mới, nó là một trường hợp đặc biệt của spawn, hay nói cách khác fork chỉ là một hàm dựa trên spawn. Child process này sẽ chạy một phiên bản độc lập của mã JavaScript được chỉ định. Mã này có thể được đặt trong một file hoặc một function được truyền dưới dạng tham số cho hàm fork.

Khi nào nên sử dụng child process cũng như fork hoặc spawn?

Trước tiên, phải nói rằng lựa chọn sử dụng child process còn phụ thuộc vào bài toán đang cần giải quyết. Vì chi phí để tạo ra một process là khá tốn kém cho nên không phải cứ tạo ra càng nhiều child process thì ứng dụng của bạn sẽ xử lý càng nhanh. Ngược lại, nó có thể nhanh chóng làm cạn kiệt tài nguyên máy chủ cũng như chi phí liên lạc giữa các tiến trình với nhau.

Node.js xử lý rất tốt I/O không đồng bộ, nếu ứng dụng xử lý nhiều về I/O có thể cần phải quan tâm đến cấu hình sao cho Worker Pools trong libuv được tối ưu nhất chứ không phải là tạo ra nhiều child process để xử lý I/O không đồng bộ. Bạn đọc có thể tham khảo thêm bài viết Phân biệt tác vụ I/O và tác vụ chuyên sâu CPU để biết cách phân biệt tác vụ I/O với Tác vụ chuyên sâu CPU.

Trong trường hợp ứng dụng cần sự tính toán của CPU nhiều hơn thì child process thực sự phù hợp. Lúc này cần phải vận dụng kinh nghiệm sử dụng hai cách tạo ra tiến trình con đã nêu ra ở trên để tối ưu chi phí tài nguyên.

Ví dụ bạn có cài một phần mềm, lệnh, bash script… trong máy chủ và muốn gọi chúng từ Node.js thì hãy sử dụng spawn. Nó chỉ đơn giản tạo ra một tiến trình để thực hiện câu lệnh trong spawn rồi trả về kết quả, vừa nhanh vừa tiết kiệm.

fork thì lại phù hợp trong trường hợp công việc "High CPU" nằm trong một file hoặc một hàm JavaScript. fork tạo ra một bản sao V8 Engine và có toàn quyền truy cập vào những module (node_modules) có trong ứng dụng của bạn. Hơn nữa, vì là tiến trình độc lập nên chẳng may tiến trình bị lỗi thì không gây ảnh hưởng nghiêm trọng đến ứng dụng của bạn cả.

Nói công việc nặng thì có vẻ trừu tượng, hãy lấy một ví dụ cụ thể là xử lý hình ảnh - đó là một trong những công việc đòi hỏi khả năng tính toán của CPU như resize, filter, cân bằng sáng tối… Bạn có thể tìm được rất nhiều ứng dụng dạng command line (cli) để cài vào máy, hoặc tìm kiếm các thư viện xử lý hình ảnh của Node.js. Nếu dùng cli tiện hơn, hãy dùng spawn, còn sử dụng thư viện, hãy dùng fork


Devwork

Devwork là Nền tảng TUYỂN DỤNG IT CẤP TỐC với mô hình kết nối Nhà tuyển dụng với mạng lưới hơn 30.000 headhunter tuyển dụng ở khắp mọi nơi.Với hơn 1800 doanh nghiệp IT tin dùng Devwork để :

  • Tối ưu chi phí
  • Tiết kiệm thời gian
  • Tăng tốc tuyển dụng tối đa
  • Đăng ký ngay Devwork trong hôm nay để tuyển dụng những tài năng ưu tú nhất.

    Tác giả: quyenntt

    Link chia sẻ

    Bình luận

    Việc làm tại Devwork

    khám phá các cơ hội việc làm tốt nhất tại Devwork Xem thêm

    Bài viết liên quan

    Danh sách bài viết liên quan có thể bạn sẽ thích Xem thêm
    luong-gross-la-gi

    Lương gross là gì? Cách quy đổi lương gross sang net dễ hiểu nhất

    07:48 12/12/2025

    Khi phỏng vấn hoặc đọc hợp đồng lao động, lương gross là cụm từ xuất hiện gần như 100%. Nhưng lương gross là gì mà lại quan trọng đến vậy? Nếu bạn đang bối rối chưa biết lương gross là gì và lương net là gì thì bài viết này Devwork sẽ giúp bạn hiểu tường tận từ khái niệm, cách tính cho đến cách quy đổi đơn giản nhất....

    Cách đặt mật khẩu máy tính đơn giản, bảo mật tuyệt đối 2026

    07:34 12/12/2025

    Chiếc máy tính, dù là PC hay laptop không chỉ là công cụ làm việc mà còn là "ngân hàng" lưu trữ vô số dữ liệu quan trọng: tài liệu cá nhân, thông tin ngân hàng, hình ảnh riêng tư... Nếu một ngày, những thông tin này rơi vào tay kẻ xấu, hậu quả sẽ thế nào? Chỉ với vài bước đơn giản, bạn có thể bảo vệ máy tính an toàn tuyệt đối bằng cách đặt mật khẩu máy tính. Bài viết này Devwork sẽ hướng dẫn chi tiết từ A-Z, phù hợp cho cả người dùng laptop và PC, giúp bạn tự làm được ngay lần đầu tiên.

    cach-dat-mat-khau-may-tinh

    Intern là gì? Toàn bộ những điều bạn cần biết về vị trí Intern

    09:39 02/12/2025

    Với sự gia tăng mạnh mẽ của nhu cầu tuyển dụng thực tập sinh tại các doanh nghiệp, khái niệm intern và internship ngày càng trở nên quen thuộc, đặc biệt với sinh viên năm cuối, người mới ra trường. Tuy nhiên, không ít bạn trẻ vẫn còn băn khoăn intern là gì, làm intern là làm gì, hay công việc intern có gì khác với fresher. Trong bài viết này, Devwork.vn sẽ giúp bạn hiểu rõ hơn về vị trí intern, đồng thời chia sẻ những cơ hội thực tập hấp dẫn dành cho người mới bắt đầu.

    intern-la-gi

    Case study là gì? Phương pháp phân tích case study hiệu quả

    04:07 25/11/2025

    Case study không phải cụm từ xa lạ trong marketing, kinh doanh hay học tập. Nhưng làm sao để tiếp cận và giải case study hiệu quả thì không phải ai cũng biết và làm được. Chính vì vậy, trong bài viết hôm nay, cùng Devwork đi tìm hiểu chi tiết về case study là gì, khám phá bí mật đằng sau các case study thành công, từ đó giúp bạn có cái nhìn toàn diện nhất để áp dụng vào công việc hoặc doanh nghiệp của mình.

    case-study-la-gi
    product-owner-la-gi

    Product Owner (PO) là gì? Giải mã vai trò quan trọng trong IT

    17:00 24/11/2025

    Trong những năm gần đây, đặc biệt là trong môi trường phát triển linh hoạt Agile và Scrum, vai trò của PO ngày càng trở nên quan trọng. PO là thuật ngữ quen thuộc trong lĩnh vực IT và quản lý dự án, nhưng không phải ai cũng hiểu rõ. Vậy PO là gì, PO là viết tắt của từ gì và vai trò thực sự của PO trong doanh nghiệp là gì? Bài viết này Devwork sẽ giải thích chi tiết, giúp bạn nắm bắt kiến thức cốt lõi và ứng dụng hiệu quả.

    singleton-pattern-la-gi

    Singleton Pattern là gì? Hướng dẫn chi tiết cách triển khai trong Java và Python

    04:00 24/11/2025

    Singleton pattern là gì và tại sao nó lại quan trọng trong phát triển phần mềm? Khi bạn cần đảm bảo rằng một class chỉ có duy nhất một thực thể trong suốt vòng đời ứng dụng, Singleton chính là giải pháp hoàn hảo. Bài viết này sẽ giúp bạn hiểu rõ về mẫu thiết kế này, cách triển khai và những tình huống nên (hoặc không nên) áp dụng nó.