@thanhps42
Nhắc lại cho bạn là một App nodejs cơ bản là single thread bạn nhé. Vì sao Nodejs hay được ứng dụng có thể phục vụ rất nhiều request một lúc là vì nó đơn luồng - nó không phải tạo thread mới để trả lại TCP request như PHP hay các loại blocking I/O khác.
Tuy nhiên vì đơn luồng nên các tác vụ dùng CPU hoạt động chuyên sâu , đặc biệt là các vòng loop sẽ blocking I/O.
Để giải quyết một phần điều này, bộ V8 engine của Google có những cách tối ưu để các vòng lặp, kết thúc một quá trình nó sẽ gọi một callback để thực thi mã của lập trình viên, nó cũng giống như một thread nhưng thay vì tạo ra một process mới nó nằm trong process ứng dụng lập trình viên. MÔT PHẦN thôi nhé, còn lại thì không.
Quay lại giả thiết 1000 người truy cập per times của bạn, liệu rằng ;
- toàn bộ 1000 người đó có gọi các quá trình dùng đến nhiều CPU chuyên sâu ko ? hay một số ít, số còn lại chỉ nhận kết quả ?
- Bạn không định dùng load balancing và scalability
Nếu có tận 1000 người/times truy vấn dùng phương thức nhiều tài nguyên và không áp dụng các biện pháp cân bằng và mở rộng mà lại chạy trên 1 process thì điều đó bất khả thi !
Dùng child process
là giải pháp đã được nhiều lập trình viên Nodejs trên TG khuyên dùng khi động đến các tác vụ phải dùng CPU chuyên sâu như render photos, video mà lại có lượng truy cập lớn (dĩ nhiên có dùng cả load balancing và scalability ). Cách này là dễ áp dụng nhất để giải quyết vấn đề này.
Còn một cách nữa, hiếm khi tôi thấy họ dùng, chỉ thấy mấy Thánh hiểu sâu về V8, C, C++ và bộ mã nguồn của Nodejs . Họ viết lại NODEJS hoặc cùi hơn là viết ADDON cho nó.
Thôi viết đến đây thôi, dài quá, 2/9 được nghỉ mà =))