JavaScript có đa luồng được không?

Hi mn. Ví dụ e for loop 10 lần, bên trong for em call ajax đến 1 file php, khi chạy e bấm f12 xem thì nó request phát 10 lần ajax luôn nhưng lần lượt từng ajax done thì nó mới thực thi tiếp ajax tiếp theo phải ko ạ?

js add task 1 vào stack.
stack nhận thấy task 1 là async nên đưa qua Microtask Queue xử lý.

js add task 2 vào stack.
stack nhận thấy task 2 là async nên đưa qua Microtask Queue xử lý.

tương tự cho đến hết vòng for.


task 1 trong Microtask Queue call ajax đến file php.
task 2 trong Microtask Queue call ajax đến file php.
tương tự cho đến hết 10 task. .


server response về cho task 1, even loop chờ stack trống nên đưa callback của task 1 vào stack và chạy nó.
server response về cho task 2, even loop chờ stack trống nên đưa callback của task 2 vào stack và chạy nó.
Tương tự cho đến hết 10 callback.

ajax response về cái nào trước thì callback của cái đó được xếp vào queue trước, mà được xếp vào queue trước nên đưa vào stack trước có nghĩa là sẽ chạy trước :rofl:

Người dev code js có tư duy là đơn luồng, vì có async nên cảm giác như đa luồng. Mà engine js bên trong hình như không đơn luồng.

Em mới học js nên chém bừa, các bác nhẹ tay :tipping_hand_man:

1 Like

Thông tin này đã có trong f12, bạn còn lên đây hỏi để làm chi

10 Likes

Vòng lặp for là tuần tự bạn à, làm gì có chuyện ngẫu nhiên thứ tự.

Còn việc các hàm được gọi theo thứ tự nhưng bạn thấy (thực sự là đang mơ hồ) kết quả trả về dường như không theo thứ tự thì bạn chỉ cần KHÔNG dùng bất động bộ khi rối vì khó/ khó kiểm soát việc xử lý.

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