Rất vui khi topic này của bạn không phải là hỏi vu vơ
Cùng phân tích vấn đề một tí
khi file sub.js kia trong worker thread chạy xong, nó cho bạn một cái event on message
bạn sẽ làm gì với event đó? 50 cái event đó có sử dụng cùng tài nguyên gì đó hay không? có cần thứ tự không? sau 50 cái event đó thì có cần chốt sổ hay handle sau khi tất cả 50 event chạy xong?
với sức mạnh của máy tính hiện nay, thì 50 thread tác vụ thông thường không phải là vấn đề gì đó ghê gớm lắm, quan trọng vẫn là 50 thread kia bạn làm gì trong đó thôi
Ok, phần đặt vấn đề đã xong, bạn tự trả lời những câu hỏi bên trên để rút ra kết luận, nếu chưa rút ra được kết luận thì hỏi tiếp
Nói về cái link bạn đưa ra một tí
Đây là section đầu tiên của link trên và nó chỉ đứng sau phần mục lúc thôi
nên có thể nói, nếu bạn đọc link trên, thì trên hình là đoạn đầu tiên mà bạn sẽ đọc
Vây đoạn trên nó nói gì?
Workers (threads) are useful for performing CPU-intensive JavaScript operations. They do not help much with I/O-intensive work. The Node.js built-in asynchronous I/O operations are more efficient than Workers can be.
Workers (threads) hữu dụng cho việc sửa dụng tài nguyên tính toán cho cpu, tức là bạn có thể sử dụng nhiều thread để khiến cho cpu nó chạy “điên cuồng” hơn (tất nhiên là trong giới hạn của cpu)
Nhưng, code không phải lúc nào cũng chỉ dùng tài nguyên cpu mà còn nhiều tài nguyên khác nữa, ổ cứng, network, database, bàn phím, ngoại vi…, và các thể loại còn lại đó gọi chung là IO
Và chúng là có câu thứ 2, They do not help much with I/O-intensive work
, workers không giúp gì được nhiều khi cho tác vụ IO
The Node.js built-in asynchronous I/O operations are more efficient than Workers can be.
vãn là cơ chế async IO sẵn có đã là tốt những gì có thể rồi, bạn không cần phải suy nghĩ gì để tối ưu cái chuyện đó cả
để có thể dẽ hình dung hơn, thì mình có một ví dụ cụ hể như này
A, B cùng mở một cửa hàng làm và bán bánh, A làm shipper (resouce database), B làm đầu bếp (resouce - CPU)
thường thì A nếu giao nhanh thì chỉ cần 5p là có thể giao một đơn hàng
B thì 3p để làm ra một cái bánh
=> trong một giờ có thể làm được 20 bánh, và giao được 12 đơn
câu chuyện sẽ chẳng có gì đáng nói nếu so lương đơn hàng không lớn, tầm 10 đơn/giờ (1 đơn 1 bánh) mỗi giờ
khi đó, trong 1 giờ, A cần giao 10 đơn, B cần làm 10 bánh, cả 2 đều rất thoải mái
Nhưng rồi nhiều người thấy ngon, nên số lượng đơn hàng tăng lên, đến 15 đơn một giờ
lúc này, A phải giao hàng liên tục, và dù có gắng hết sức, nhưng A vẫn chỉ có thể giao được 12 đơn trong một giờ mà thôi, nhưng lúc này làm 15 bánh trong một giờ vẫn là chuyện trong tầm tay của B
vì không thể giao nhiều hơn, nên họ đành từ chối 3 đơn, lúc này thì cái họ thiếu là shipper (databse) chứ không phải thợ làm bánh (CPU)
qua câu chuyện trên, dù thợ làm bánh có làm được 1000 bánh trong 1 giờ thì cũng vô dụng, cũng chỉ có thể bán đợc 12 bánh trong 1 giờ, nên thợ làm bánh cũng chỉ làm đúng số bánh cần giao rồi ngồi đợi shipper mà thôi, rảnh cũng không làm thêm được vì không có đủ resouce shipper