2017-08-08 23 views
28

Tôi đã đọc thisthis, xem this ...Node.js vòng lặp sự kiện hiểu biết (với một sơ đồ)

Tôi đã thực hiện một sơ đồ như thế nào tôi hiểu nó:

enter image description here

  • callbacks Javascript (chức năng) có thể có mặt trong current queue, check queue, close callbacks queue, timers queueI/O callbacks queue.
  • Mã Js chỉ được thực hiện từ current queue một chức năng (nhiệm vụ/công việc) tại một thời điểm.
  • Mã Js được thực thi tại thời điểm này có thể thêm microtask (công việc) vào current queue để được thực thi sau chính nó và macrotask (tác vụ) đến check queue. Nó có thể thêm nhiệm vụ vào các hàng đợi khác chỉ bằng cách yêu cầu API thực hiện nhiệm vụ đó.
  • Idle, prepare giai đoạn được sử dụng cho một số nút js kinh doanh nội bộ (có thể giống như thu gom rác).
  • Poll thăm dò ý kiến ​​giai đoạn chủ đề từ nhóm chủ đề và điền vào hàng đợi với các cuộc gọi lại thích hợp.
  • Idle, preparepoll các giai đoạn không có hàng đợi cho các cuộc gọi lại js được liên kết với chúng.
  • (bốn) Chủ đề trong các thread pool đều giống nhau và không có chuyên môn.
  • Vòng lặp sự kiện sẽ thực hiện và thực hiện từng công việc từ mỗi hàng đợi cho đến khi hàng đó trống, sau đó chuyển sang hàng đợi tiếp theo.
  • Nhiệm vụ trong hàng đợi không có bất kỳ công việc nào (dịch vụ nhỏ) được liên kết với chúng. Công việc chỉ được tạo trong khi thực hiện tác vụ hoặc công việc khác và chỉ xuất hiện trong số current task queue.

Điều đó có đúng hay tôi thiếu gì đó?

Tệp .pptx MS Power Point có biểu đồ có thể được tìm thấy here.

+0

Điều này có vẻ quá phức tạp với tôi. Có lẽ nó là, nhưng không phải là một mô hình đơn giản, đủ khi bạn viết mã? Tôi nghĩ rằng nó không phải là cần thiết để biết tất cả các chi tiết đang diễn ra dưới mui xe. Không phải là nó đủ để biết rằng có một hàng đợi cho các đánh dấu hiện tại, một hàng đợi cho đánh dấu tiếp theo và callbacks đang chờ hẹn giờ hoặc I/O. –

+8

Tôi không thể trả lời câu hỏi này, nhưng tôi thực sự đánh giá cao nỗ lực bạn đưa vào câu hỏi của mình. – georg

+0

@LorenzMeyer Một mô hình đơn giản là đủ để viết mã, nhưng tôi vẫn muốn biết những gì dưới mui xe. Georg, cảm ơn :) – grabantot

Trả lời

1

Biểu đồ có vẻ khá phức tạp. Tôi thấy một vị vua tương tự khá hoàn hảo trong bối cảnh này để có một mức độ hiểu biết về cách thức hoạt động của vòng lặp sự kiện.

Hãy tưởng tượng mã bạn muốn chạy là vua và nút là đội quân của công chức.

Ngày bắt đầu bởi một người hầu thức dậy nhà vua và hỏi anh ta xem anh ta có cần bất cứ điều gì không. Nhà vua cung cấp cho người hầu một danh sách các nhiệm vụ và đi trở lại ngủ lâu hơn một chút. Người hầu bây giờ phân phối các nhiệm vụ trong số các đồng nghiệp của anh ta và họ làm việc.

Khi người giúp việc hoàn thành một nhiệm vụ, anh ta xếp hàng bên ngoài các vị vua của tòa án để báo cáo. Nhà vua cho phép một người hầu tại một thời điểm, và lắng nghe những điều mà anh ta báo cáo với số . Đôi khi nhà vua sẽ cung cấp cho người hầu nhiều nhiệm vụ hơn trên đường ra.

Cuộc sống là tốt, vì các công chức của vua thực hiện tất cả các nhiệm vụ của mình trong song song, nhưng chỉ báo cáo với một kết quả tại một thời điểm, vì vậy nhà vua có thể tập trung .

Vua ở đây là quy trình nút chính. Đây là cách các nodej được gọi là đơn luồng nhưng không đồng bộ.

Các vấn đề liên quan