Loading Now

Event Loop trong JavaScript là gì?

Event Loop trong JavaScript

JavaScript là ngôn ngữ lập trình hoạt động theo mô hình đơn luồng (single-threaded). Điều này có nghĩa là tại một thời điểm, nó chỉ có thể thực hiện một tác vụ duy nhất. Tuy nhiên, thực tế JavaScript vẫn có thể xử lý nhiều tác vụ bất đồng bộ như tải dữ liệu từ server, xử lý sự kiện người dùng. Điều này được thực hiện nhờ vào cơ chế gọi là Event Loop.

Cơ chế hoạt động của Event Loop

Co-che-hoat-dong-cua-Event-Loop-1024x585 Event Loop trong JavaScript là gì?

Call Stack

Khi JavaScript chạy, nó sử dụng Call Stack (ngăn xếp gọi hàm) để xử lý các hàm một cách tuần tự. Những hàm này được thực thi ngay lập tức.

Callback Queue và Microtask Queue

Các tác vụ bất đồng bộ như hàm setTimeout, request API hoặc các sự kiện (nhấp chuột, cuộn trang,…) sẽ không được thực thi ngay. Thay vào đó, chúng được đưa vào các hàng đợi riêng biệt gọi là Callback Queue hoặc Microtask Queue.

Event Loop

Event Loop liên tục kiểm tra trạng thái của Call Stack. Khi Call Stack rỗng, Event Loop sẽ lần lượt lấy các tác vụ từ Microtask Queue trước, sau đó mới đến Callback Queue để thực thi.

Ví dụ minh họa

Dưới đây là ví dụ cụ thể giúp bạn dễ hiểu hơn về cách Event Loop hoạt động:

console.log("Bắt đầu thực thi chương trình");

// setTimeout là hàm hẹn giờ phổ biến trong JavaScript
setTimeout(() => {
  console.log("Chạy sau setTimeout 0 giây");
}, 0);

// Promise.resolve là một phương thức quan trọng trong xử lý Promise
Promise.resolve().then(() => {
  console.log("Promise thực hiện ngay khi có thể");
});

console.log("Kết thúc thực thi chương trình chính");

Kết quả hiển thị

Bắt đầu thực thi chương trình
Kết thúc thực thi chương trình chính
Promise thực hiện ngay khi có thể
Chạy sau setTimeout 0 giây

Tại sao kết quả lại như vậy?

Kết quả này xảy ra là do Promise được đưa vào Microtask Queue, vốn ưu tiên cao hơn Callback Queue. Vì vậy, nó thực thi trước tác vụ setTimeout dù setTimeout có thời gian hẹn giờ là 0 giây.

Kết luận

Nhờ Event Loop, JavaScript có thể xử lý mượt mà các tác vụ bất đồng bộ. Qua đó, giữ cho giao diện người dùng luôn phản hồi nhanh, giúp trải nghiệm người dùng mượt mà hơn.

Xem thêm:

REST API vs Stream API: Hiểu sự khác biệt và cách sử dụng

WordPress functions.php: Cách hoạt động, khi nào chạy & sử dụng

Share this content:

Post Comment

Bạn có thể đã bỏ qua