Bao nhiu dev trong này hỉu đc khái niệm Event Loop của thằng JS

Thích_Yến_Trân

Lồn phải lá han
Basque-Country
Như tiêu đề. Có anh em nào trong ngành IT thực sự biết Event Loop nó hoạt động ntn để đảm bảo các tác vụ đồng bộ đc thực thi trc không đồng bộ không :vozvn (20):
 
Chờ xem nào. Về Js mà có gì khó quá k hiểu, m lên fb gõ tìm tịpavascript rồi đặt câu hỏi. Ông chủ page đó sẽ lên video giải thích cho m hiểu vấn đề. Kênh này chia sẻ toàn kiến thức thực tế
 
Chờ xem nào. Về Js mà có gì khó quá k hiểu, m lên fb gõ tìm tịpavascript rồi đặt câu hỏi. Ông chủ page đó sẽ lên video giải thích cho m hiểu vấn đề. Kênh này chia sẻ toàn kiến thức thực tế
Nhưng k sâu, k cặn kẽ. T có coi một blog ổng gthich về closure r nhưng cưỡi ngựa xem hoa lắm. Thực tế đúng là chỉ cần aware là đc nhueng tại sao ngta sinh ra nó, mình có can thiệp vào tiến trình đó đc ko, nếu đc thì bn % mới khoai :vozvn (20):
 
Tao trình cùi chỉ biết nó có cái call stack, Web API với callback queue
Đầu tiên chạy file js thì nó đưa các câu lệnh vào call stack, gặp bất đồng bộ nó đẩy sang cho Web API chứ ko chờ thực hiện xong. mà nó vẫn tiếp tục thực hiện câu lệnh tiếp. Web API sau khoảng thời gian chờ (setTimeout, setInterval, fetch API resolve,...) thì nó đưa xuống callback queue, thằng nào xong trước thì vô queue trước. Callstack mà rỗng thì callback queue được đưa lên thực thi.
Lên kênh ông Dev coi thêm, JS giờ tài liệu với nguồn bao la. coi nguồn English thêm vào
 
Nhưng k sâu, k cặn kẽ. T có coi một blog ổng gthich về closure r nhưng cưỡi ngựa xem hoa lắm. Thực tế đúng là chỉ cần aware là đc nhueng tại sao ngta sinh ra nó, mình có can thiệp vào tiến trình đó đc ko, nếu đc thì bn % mới khoai :vozvn (20):
Ừm. T thì k theo js nên k nghiên cứu. Thấy ông này làm video ổn nên gợi ý m thế
 
Có giải thích cho mày nhưng mày đéo bao giờ lập trình cái tương tự thì mày cũng đéo hiểu cặn kẽ được. Mày cứ lập trình tầng js và tự cảm nhận thôi.
Còn muốn hiểu cặn kẽ eventloop mày phải làm những cái tương tự ở tầng thấp như Win32 API (lập trình win32 đúng nghĩa là dùng event loop rõ ràng nhất, đừng dùng mfc) hoặc nhúng (adruino cũng được), mày sẽ chạy loop và chờ event từ user, hệ thống, ... bắn vào rồi phân phối xử lý message sao cho đéo blocking, ...
À mà js mày nói là browser hay nodejs. 2 cái này chạy 2 thứ khác nhau. Nodejs thì dùng libuv làm event loop. Mày từng dùng win32 thì vọc cái libuv này để hiểu event loop của nó cũng dễ thôi!
 
Thằng nào có tài liệu cặn kẽ cái js ko, t học thấy nó cứ sao sao ko như thằng java
 
học ông dev với thêm tí kiến thức bất đồng bộ m sẽ hiểu 1 tí ( như t ) nhưng chưa áp dụng tới bao h . t thấy nó giống bất đồng bộ hơn . chạy async ở sau khi nào tới đúng thời điểm cần chạy hàm trong stack thì nó lấy ra . t chưa hiểu cặn kẽ hết . hi vọng cao nhân nào trong xam sẽ giúp m
 
Tml có giỏi về môn Operating System không?

T đi từ khái niệm Os cơ bản trc cho m dễ hiểu.

1. 1 application (task) được chạy như thế nào.
a. Compiling + tối ưu hóa code của task, linking libraries, khởi tạo các biến global (đặt ở heap memory)
b. task sẽ có 1 main function. Trong main sẽ có các câu lệnh, function, method nhỏ hơn. Nó sẽ được biên dịch thành nhiều frames(đặt ở stack memory)
c. Khi chạy cái task thì nó sẽ execute mấy cái frame này. Execute xong thì nó xóa frame khỏi memory, chạy hết toàn bộ thì xong task.

2. Khi có nhiều applications (tasks) chạy cùng lúc thì sẽ như thế nào
Lúc này có thêm khái niệm là multiple threading và scheduler.
Các task sẽ vẫn chia nhỏ ra như trên. Và cái scheduler sẽ xếp thứ tự execute của các frame nhỏ này vào 1 cái gọi là message queue. Rule để xếp thì có fifo, round robin
Os sẽ đọc cái queue này rồi execute theo thứ tự từ cũ đến mới (fifo)

3. Có nhiều CPU (processor) và muốn chạy nhiều tasks thì làm thế nào
Mỗi cái processor sẽ có 1 message queue. Rồi có thêm cơ chế để merge kết quả các queue này với nhau

4. Quay trở lại thế giới của web browser chúng ta sẽ có các khái niệm : browser, tab, js runtime, eventloop

1 browser sẽ dc coi là 1 os nhỏ. Nó có memory, processor và cả scheduler luôn.

Khi mở 1 tab mới thì tương ứng với việc sử dụng browser để chạy 1 taak
Task này nhờ cái js runtime cũng dc chia nhỏ ra thành các frames. Khi có event (buttonclick, etc) thì tương ứng với việc có thêm frames mới để execute. Vậy thôi
Eventloop thì cái concept của js runtime, y xì một cái scheduler. Nó qui định rõ về các trạng thái của 1 frame.

5. Biết dc mấy cái concept cool ngầu này thì dc cái gì?
Chả dc cái vẹo gì. Chắc chắn là không đụng đến.

TTham khảo
1. https://developer.mozilla.org/en-US/docs/Web/JavaScript/EventLoop#event_loop
2. https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/#what-is-the-event-loop

Ý kiến cá nhân.
T thấy mấy cái concept trong môn Operating System khó vkl.
Cứ cái gì dính đến conputer là sẽ có những concept này :Cloud, browser, embedded.
Bọn dev nó chỉ đổi tên cho ngầu chứ cách hoạt động là không đổi. Vì nó là tối ưu nhất rồi.

Nếu có gì sai. Nhờ mấy tml góp ý.
 
Top