6. Bố cục báo cáo
1.4.2. Nguyên tắc hoạt động của cơ chế bất đồng bộ [3]
Bất đồng bộ(Asynchronous): Không theo thứ tự, các hành động có thể xảy ra đồng thời hoặc chí ít, mặc dù các hành động bắt đầu theo thứ tự nhưng kết thúc thì không. Một hành động có thể bắt đầu (và thậm chí kết thúc) trước khi hành động trước đó hoàn thành. Vì thế, trong thời gian chờ kết quả trả về nó vẫn hoạt động do đó cơ chế xử lý bất đồng bộ tối ưu được thời gian xử lý.
9
Heap : là vùng nhớ được dùng để chưa kết quả tạm phục vụ cho việc thực thi các hàm trong stack. Heap càng lớn thì khả năng tính toán càng cao.
Stack: là một vùng nhớ đặc biệt trên con chip máy tính phục vụ cho quá trình thực thi các dòng lệnh mà cụ thể là các hàm. Hàm chẳng qua là một nhóm các lệnh và chương trình thì gồm một nhóm các hàm phối hợp với nhau. Mỗi khi một hàm được triệu gọi thì nó sẽ được đẩy vào một hàng đợi đặc biệt có tên là stack. Stack là một hàng đợi kiểu LIFO (Last In First Out) nghĩa là vào đầu tiên thì ra sau cùng. Một hàm chỉ được lấy ra khỏi stack khi nó hoàn thành và return.
Js runtime engine là khu thực thi câu lệnh js gồm Heap và stack. Web APIs là nơi chức các tác vụ được cung cấp bởi trình duyệt.
Callback queue: là hàng đợi công việc kiểu FIFO(first in first out). Vào trước ra trước.
Event Loop: là đọc Stack và Event Queue. Nếu nhận thấy Stack rỗng nó sẽ nhặt Event đầu tiên trong Event Queue và handler (callback hoặc listener) gắn với Event đó và đẩy vào Stack. Đặc điểm của việc thực thi hàm trong JS là sẽ chỉ dừng lại khi hàm return hoặc throw exception. Có nghĩa là trong khi hàm đang chạy thì sẽ không có một hàm khác được chạy, dữ liệu tạm của hàm cũng sẽ không bị thay đổi bởi một hàm khác hay cũng không bị dừng lại cho đến khi hoàn thành. Bởi vì có 1 vòng lặp chạy mãi mãi thực thi Queue nên nó có tên gọi là Event-loop.
Cơ chế hoạt động:
Đầu tiên: các câu lệnh được chạy lần lượt từ trên xuông dưới. Các câu lệnh sẽ được ném vào hàng đợi queue.
Bước 2: lúc này stack chưa có gì nên event loop sẽ lấy 1 tác vụ ở trong queue bỏ vào stack. Tức là khi này lệnh đầu tiên sẽ được cho vào stack và xử lý.
Bước 3: sau khi xử lý xong thì tác vụ 1 sẽ được lấy ra khỏi stack. Và cho tác vụ 2 vào. Khi nào hàng đợi queue rỗng thì nó sẽ được đưa trở lại hàng đợi.
10
Bước 5: lúc này hàng đợi rỗng nên tác vụ 2 sẽ được đưa trở lại queue và sau đó được đưa vào stack để thực hiện.