Hiểu về Event Loop trong Node.js
Bài 3 – Kiến trúc Event Loop và cơ chế bất đồng bộ của Node.js.
Hiểu về Event Loop trong Node.js
Event Loop là trung tâm của toàn bộ cơ chế hoạt động trong Node.js. Đây là lý do Node có thể xử lý nhiều tác vụ cùng lúc dù chạy trên một luồng duy nhất. Bài học này giúp bạn nắm rõ vòng đời vận hành của Event Loop và cách Node.js xử lý bất đồng bộ.
1. Nội dung chính
- Event Loop là gì và vì sao quan trọng
- Cách Node.js xử lý bất đồng bộ với single-thread
- Call Stack – Callback Queue – Microtask Queue
- Thứ tự thực thi của
setTimeout,Promise,I/O - Tại sao Node.js phù hợp cho I/O-bound nhưng không phù hợp cho CPU-bound
2. Ví dụ
console.log("A");
setTimeout(() => {
console.log("B");
}, 0);
Promise.resolve().then(() => {
console.log("C");
});
console.log("D");
// Kết quả thực thi: A, D, C, B
3. Kiến thức trọng tâm
- Node.js chạy đơn luồng nhưng xử lý nhiều tác vụ nhờ cơ chế event-driven
- Microtask (Promise) luôn được chạy trước macrotask (setTimeout, I/O)
- Event Loop giúp Node xử lý hiệu quả I/O, mạng, file… nhưng kém tối ưu cho tác vụ CPU nặng
4. Bài tập nhanh
-
Viết đoạn code sử dụng setTimeout và Promise, quan sát thứ tự thực thi
-
Tạo một vòng lặp lớn (ví dụ: 1–2 tỷ lần) và xem Node bị chặn như thế nào
-
Thử đọc file bằng fs.readFile và log kết quả trước/sau để xem vòng lặp xử lý:
const fs = require('fs');
console.log('Bắt đầu đọc file...');
fs.readFile('package.json', 'utf8', (err, data) => {
console.log('Đọc file xong!');
});
console.log('Tiếp tục thực thi...');
5. Kết luận
Event Loop là nền tảng cốt lõi của Node.js, quyết định cách ứng dụng xử lý tác vụ. Hiểu rõ vòng lặp sự kiện giúp viết code tối ưu, hạn chế tình trạng nghẽn luồng và cải thiện hiệu năng hệ thống.