Poll phase trong NodeJS event loop sẽ đợi đến timer nhỏ nhất

5th Jan 2023
Poll phase trong NodeJS event loop sẽ đợi đến timer nhỏ nhất
Table of contents

Cá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

Bạn thấy bài viết này như thế nào?
2 reactions

Add new comment

Image CAPTCHA
Enter the characters shown in the image.

Related Articles

Thêm một listener vào phía cuối của mảng listeners cho sự kiện được chỉ định. Phương thức này không kiểm tra rằng listener này đã từng được thêm vào hay chưa.

Microservices là các dịch vụ nhỏ, tách biệt đại diện cho 1 phần nhỏ tương ứng trong business domain của bạn. Với kiến trúc Monolithic

Truy cập http://fullstack.edu.vn (miễn phí) để làm bài tập và quản lý được tiến độ học của bạn.