Tìm hiểu về Event Loop trong NodeJS
1. Tổng quan về NodeJS Event Loop
NodeJS là một ứng dụng đơn luồng (Single Thread), nó hoạt động phía trên một nền tảng được viết bởi C++, nền tảng này sử dụng đa luồng (Multi-Thread) để thực hiện đồng thời các nhiệm vụ.
Hình dưới đây minh họa các yêu cầu (request) từ phía các người dùng gửi đến máy chủ NodeJS.
Mỗi yêu cầu (request) từ phía người dùng được NodeJS coi là một sự kiện (event), chúng được đặt vào một Event Queue (Hàng đợi sự kiện). NodeJS sử dụng quy tắc FIFO (First In First Out), điều này có nghĩa là những yêu cầu đến trước sẽ được xử lý trước.
Event Loop
Là một vòng lặp vô tận, nó sẽ chuyển các yêu cầu sang Thread Pool (Bể chứa các luồng), đồng thời mỗi yêu cầu sẽ được đăng ký một hàm Callback. Khi một yêu cầu được xử lý xong, hàm Callback tương ứng sẽ được gọi thực thi.
Thread Pool
Là một chương trình viết bằng ngôn ngữ C++, nó hỗ trợ đa luồng (Multi Threads), chính vì vậy tại đây các yêu cầu sẽ được xử lý trên các luồng khác nhau. NodeJS cũng hỗ trợ đa tiến trình (Multi Processes), điều này có nghĩa là chúng có thể được thực thi trên các lõi (Core) khác nhau.
Khi một yêu cầu được xử lý xong, NodeJS sẽ gọi hàm Callback (Đã được đăng ký cho yêu cầu này) để thực thi nó.
CÁC KẾT LUẬN:
Kết luận cơ bản thứ nhất: Nếu mỗi kết nối tới Server đều mở ra một luồng (Thread) sẽ rất tốn bộ nhớ. Điều này đã được chứng thực khi bạn so sánh Apache và Nginx (Hai Web Server triển khai các ứng dụng PHP). Apache đã tiêu tốn bộ nhớ khủng khiếp hơn rất nhiều so với Nginx.
NodeJS giống với Nginx là chúng chỉ sử dụng một luồng đơn (Single thread) để đón tiếp các kết nối từ phía người dùng, và coi mỗi yêu cầu của người dùng là một sự kiện.
Kết luận cơ bản thứ hai: Các hoạt động I/O rất tốn tài nguyên của hệ thống, vì vậy NodeJS quản lý chặt chẽ việc sử dụng các hoạt động I/O. Vì vậy bạn chỉ cần sử dụng Callback khi bạn thực thi các nhiệm vụ liên quan tới I/O.
Về cơ bản rất nhiều thứ trong NodeJS đang chạy song song trên các luồng khác nhau, nhưng chúng được quản lý trực tiếp bởi NodeJS, chẳng hạn như Thread Pool. Còn những gì bạn viết ra được chạy trên một luồng đơn (single thread).
Các hướng dẫn NodeJS
- Giới thiệu về NodeJs
- NPM là gì?
- Hướng dẫn NodeJS cho người mới bắt đầu
- Cài đặt trình soạn thảo Atom
- Cài đặt NodeJS trên Windows
- Hướng dẫn và ví dụ NodeJS Module
- Khái niệm Callback trong NodeJS
- Tạo một HTTP Server đơn giản với NodeJS
- Tìm hiểu về Event Loop trong NodeJS
- Hướng dẫn và ví dụ NodeJS EventEmitter
- Hướng dẫn và ví dụ NodeJS Buffer
- Kết nối cơ sở dữ liệu MySQL trong NodeJS
Show More