Mình xin bổ sung thêm 1 chút. Về mã nguồn CORE của nodejs thì bao gồm 2 thành phần chính javascript
và C++
.
- Code
C++
bao gồm các đoạn mã xử lý native hoặc wrap tới các thư viện bên ngoài và rất quan trọng nhưV8
,libuv
,openssl
,zlib
. Đây là các thành phần tạo nên kiến trúc của NodeJS. Các bạn xem hình bên dưới. - Code
javascript
bao gồm các tiện ích thuần js nhưutil.js
hoặc là các đoạn mã binding tới các mã nguồn C++ mà sẽ được thực thi ở bên trongV8
hoặclibuv
khi chạy 1 ứng dụng node.
Về kiến trúc và mô hình hoạt động của nodejs thì nó tuân theo cơ chế Non-blocking
và kiến trúc event-loop
. Các bạn có thể xem hình vẽ mô hình này để dễ hình dung hơn. Nhưng cơ bản kiến trúc này sẽ được thực thi qua các bước sau.
- Đoạn mã nguồn
javascript
bạn viết ra sẽ được thực thi tuần tự trongV8
. Nếu có lời gọikhông đồng bộ
thì thực hiện bước 2, khác thì kết thúc. - Lời gọi được xử lý bên trong OS hoặc thực thi các
Web API
. Lời gọi này được quản lý bởilibuv
, mỗi 1 yêu cầu sẽ được đưa vào queue và thực thi lần lượt bên trongThreadpool
khi pool này rảnh. Size mặc định libuv qui định là 4, các bạn có thể tham khảo thêm ở đây. Kết thúc bước này trả về kết quả đẩy vào 1callback queue
, và cứ nằm ở đó rồi chuyển sang bước 3. - Event loop luôn kiểm tra 2 nơi là
call stack
vàcallback queue
. Nếu callstack trống thì kiểm tra callback queue, khác rỗng thì đưa vào callstack xử lý. - V8 xử lý (tuần tự) và kết thúc chương trình
Mời các bác bổ sung thêm!