Gia Cát Lợn
Senior Member
Cho em hỏi ngu cái, nếu thằng event loop nó trả về đúng lúc bên stack đang nhét 1 lệnh thực thi luôn thì sao nhỉ? 2 thằng cùng dc nhét vào cùng lúc thì sao nó biết nhét thằng nào vào trước
Cho em hỏi ngu cái, nếu thằng event loop nó trả về đúng lúc bên stack đang nhét 1 lệnh thực thi luôn thì sao nhỉ? 2 thằng cùng dc nhét vào cùng lúc thì sao nó biết nhét thằng nào vào trước
function foo() {
return foo();
}
foo();
Cho em hỏi ngu cái, nếu thằng event loop nó trả về đúng lúc bên stack đang nhét 1 lệnh thực thi luôn thì sao nhỉ? 2 thằng cùng dc nhét vào cùng lúc thì sao nó biết nhét thằng nào vào trước
Ko hẳn, mình nhớ đợt trước có xem cái video xong đào sâu mấy blog về cái này thì khi nào trong call stack đc clear hết thì mới push tiếp cái event loop đã đc resolve vào stack để thực thiChiểu theo cái video giải thích của Philip Roberts, và theo cách mà 1 js program được load nhé, thì mình thấy ko thể có trường hợp như bạn mô tả xảy ra.
Khi 1 js program được load, trong cái execution context đó thì hàm main (entry point of the program) được load thẳng vào call stack, cùng với đó là tất cả các hàm được gọi đến trong main. Tất cả đống này trong stack là đống data duy nhất được load trực tiếp vào stack mà ko thông qua event loop.
Sau đó mọi data khác muốn được đẩy vào stack đều phải đi qua event loop.
Đó cũng là điều giải thích cho trường hợp tạo ra 1 cái js loop gọi vô hạn đến 1 hàm, làm treo đơ luôn browser
VD với cái program này:
hàm foo được gọi đến liên tục, call stack cứ thế đầy lên mà ko pop đc cái data nào ra cả, dẫn tới ko có bất cứ data nào trong event loop đc push vào stack cả (khi stack chưa thỏa mãn điều kiện empty) làm treo luôn browser hoặc xuất hiện lỗi "RangeError: Maximum call stack size exceeded"JavaScript:function foo() { return foo(); } foo();

JS là single thread, non-blocking IORồi bác cho em hỏi js là multi hay single? Như bác nói thì thread chính xử lý là single![]()
Mạnh dạn đi bác, trên này nhiều cao nhân lắmBác cho em hỏi tí
Sent from Samsung SM-N950F using vozFApp

câu trả lời khá ưng như nào vậy fenLúc còn làm cho cty, cũng hay được đi phỏng vấn cùng leader. Đã pv khá nhiều ứng viên cho vị trí Js/Nodejs, hay hỏi một câu "Lấy một ví dụ để minh họa Js chạy trên môi trường trình duyệt web chrome là single thread", mới gặp được 1 cậu trả lời khá ưng, còn lại thì hơi mung lung.

Việc treo là tại vì chính hàm loop đó sẽ block main thread, ko cho browser sử dụng main thread để render.nếu loop với 1 con số lớn, đặt 1 button click alert. Loop chạy, lúc này browser hầu như treo, không click vào được button. Vậy có phải là chứng minh cho việc js là single thread không các thím. Vào đọc tẹo thấy hổng kiến thức luôn rồi![]()

Việc treo là tại vì chính hàm loop đó sẽ block main thread, ko cho browser sử dụng main thread để render.
Bản thân JS là single thread nhưng hệ sinh thái của nó thì ko, trên browser thì sẽ có những Web API thực hiện những async task nhờ Event Loop. Nhưng để execute được những async task thì đều phải đẩy cho main thread để thực thi![]()
.Khi muốn khẳng định một vấn đề, bạn phải làm rõ vấn đề trước. Định nghĩa "single thread" đang được đề cập tới ở đây là gì? Thậm chí Javascript đang được nhắc tới ở đây là gì?nếu loop với 1 con số lớn, đặt 1 button click alert. Loop chạy, lúc này browser hầu như treo, không click vào được button. Vậy có phải là chứng minh cho việc js là single thread không các thím. Vào đọc tẹo thấy hổng kiến thức luôn rồi![]()
Js lâu lắm không code nữa, giờ mấy khai niệm event loop, hoisting, callback, bind, call, apply chắc chả mấy ai quan tâmchuyên sâu js thì hỏi gì mấy bác nhỉ
bên java hỏi sâu thì hỏi về async concurrency này nọ
k biết sâu bản chất ngôn ngữ bên js thì là gì
