Poll phase trong NodeJS event loop sẽ đợi đến timer nhỏ nhất
5th Jan 2023Các bác ơi cho em hỏi với ạ. Em có đọc trên doc của nodejs
>>> https://nodejs.org/en/docs/guides/event-loop-timers-and-nexttick/
Ở phần poll phase, doc có nói là nó sẽ block ở đây để thức hiện các io callback cho đến khi timer expire hay có callback của setImmediate. Vậy các bác cho em hỏi trong trường hợp k có callback nào của timer, setImmediate, event loop đang block tại poll phase mà có callback được add vào close hoặc pending phase thì event loop có chuyển tới các phase này để thực hiện không ạ.
Em có search gg rất nhiều mà không có bài viết nào đề cập đến vấn đề này. Mong các cao nhân giúp em với ạ. Em cảm ơn rất nhiều ạ.
Poll phase sẽ block trong 1 khoản thời gian nhất định để xem xem có io task nào hoàn thành chưa. Nếu có io task hoàn thành thì event loop sẽ gọi các callback của các io task đã hoàn thành ra thực thi. Nếu chưa có io task nào xong thì event loop sẽ đợi hết thời thời gian block đã hết thì event loop sẽ chuyển đến check phase rồi đến close phase.
Theo mình tìm hiểu thì thời gian block = thời gian nhỏ nhất của callback trong timer queue (kb đúng k?). Vậy nếu không có callback nào trong timer queue thì có block nx không hay tiếp tục loop?
Thời gian đó ko tính thời gian callback: vd poll phase block 100ms mà tất cả callback chỉ thực thi 2ms thì poll phase vẫn block tiếp 98ms còn lại, khi nào callback nhiều quá thời gian đó thì event loop sẽ thực thi hết callback
Cái 100ms chính là thời gian nhỏ nhất của callback timer, nhưng mình đang hỏi trong trg hợp k có callback timer và callback setImmediate nào thì poll phase sẽ block ntn?
Group participant không có set immediate thì thì eventloop sẽ đi đến close phase thôi, xong close phase là hết 1 chu kì và event loop sẽ trở lại ktra timer phase
Doc có nói là nó sẽ block ở đây để thức hiện các io callback cho đến khi timer expire hay có callback của setImmediate
Có 2 trường hợp
1. poll callback empty
- nếu có callback đc set bởi setImmediate -> chuyển sang check phase và execute.
- Nếu k -> đợi trong 1 khoảng thời gian nhất định (tạm gọi là T) để nhân thêm callback và execute toàn bộ callback nhận đc
- Nếu k và khoảng thời gian T kết thúc -> sang 3
2. poll callback k empty
- execute lần lượt từng callback đến khi empty -> quay lại 1
3. Sau khi poll empty + k có callback của setImmediate + khoảng thời gian T ở trên kết thúc -> check timer callback xem đã timeout chưa -> nếu rồi -> chuyển qua phase timer
Trả lời câu hỏi của bạn "event loop đang block tại poll phase mà có callback được add vào close hoặc pending phase thì event loop có chuyển tới các phase này để thực hiện không"
=> Nếu đang block thì chắc chắn không thể chuyển sang phase khác được, chỉ khi poll phase nó thoả 1 số điều kiện như đã nói ở trên thì nó mới move sang phase khác
- 28 views
Add new comment