Tại sao nodejs chạy single thread mà vẫn có thể "chạy multi thread"

Tại sao js chạy trên 1 thread duy nhất mà ko bị lag, vẫn có thể chạy song song, vẫn có thể code web server,…

Nếu bạn code bằng JS chay, thì chắc chắc là single thread (mình không tính đến các biến thể khác của JS Engine nha).
Nhưng có nhiều thư viện có code bằng native code, multithread có thể chạy ở đó, tất nhiên khi callback về JS Land, nó vẫn phải chạy single thread.
Tư tưởng thiết kế các thư viện, code trong Nodejs là Async Programming, trong đó ta cho các tác vụ (task) có thể được tách ra thành từng mảnh và chạy xen kẽ nhau, không cần nhiều thread.
Bạn nói Nodejs không bị lag là ko hoàn toàn đúng nhé, không ai code máy chủ game bằng Javascript hoàn toàn đâu. Chẳng qua cách hoạt động của nó phù hợp với các hệ thống nhỏ ko cần nhanh quá nhưng chi phí thấp, dễ quản lý và suy lý.

Các keyword cho bạn: Preemptive Multitasking, Cooperative Multitasking, Asynchronous, Synchronous, Concurrency, Parallelism.
Chú ý Asynchronous không đồng nghĩa với song song.

4 Likes

dù Nodejs là single thread, vẫn có thể tận dụng tất cả CPU của máy chủ với module pm2. (mỗi thread chạy trên một cpu). Do đó web bé và vừa thì vẫn nên sài nodejs vì nó xây nhanh lắm :smile:

1 Like

Nếu mà muốn làm 1 hệ thống multitasking nhưng các task có chia sẻ dữ liệu cho nhau, mà phải chia sẻ thật nhanh, thì có pm2 hay là worker thì cũng RIP :sweat_smile:, process của hệ điều hành không thể chia sẻ trực tiếp dữ liệu cho nhau. Tất nhiên nếu các task có thể chạy độc lập với nhau thì chia process thay vì chia thread thì là một cách khá ổn.

3 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?