2015-03-23 24 views
10

Tôi đã tìm kiếm một số câu hỏi, nhưng có vẻ như mọi người chỉ nhấn mạnh vào không chặn IO.Node.js xử lý các yêu cầu đồng thời bằng một chuỗi như thế nào?

Giả sử nếu tôi chỉ có một ứng dụng rất đơn giản để trả lời văn bản "Hello World" cho khách hàng, nó vẫn cần thời gian để hoàn thành quá trình thực thi, cho dù nó có nhanh như thế nào. Điều gì sẽ xảy ra nếu có hai yêu cầu đến chính xác cùng lúc, Node.js đảm bảo cả hai yêu cầu sẽ được xử lý bằng một luồng như thế nào?

Tôi đọc blog Understanding the node.js event loop có nội dung "Tất nhiên, trên chương trình phụ trợ, có các luồng và quy trình để truy cập DB và thực thi quy trình". Đó là tuyên bố liên quan đến IO, nhưng tôi cũng tự hỏi nếu có thread riêng biệt để xử lý hàng đợi yêu cầu. Nếu đúng như vậy, tôi có thể nói rằng khái niệm chuỗi đơn Node.js chỉ áp dụng cho các nhà phát triển xây dựng các ứng dụng trên Node.js, nhưng Node.js thực sự đang chạy trên nhiều luồng đằng sau khung cảnh?

+0

Xin lưu ý rằng "Trong Node.js, mọi thứ đều chạy song song ngoại trừ mã của bạn ". Mã của bạn chạy trong một chuỗi, nhưng các sự kiện được xử lý bởi nhiều luồng phía sau cảnh. –

+0

@BibekSubedi, I google 'Trong node.js, mọi thứ chạy song song trừ mã của bạn', nó giúp làm rõ một số nhầm lẫn, cảm ơn. –

Trả lời

8

Hệ điều hành cho mỗi kết nối socket một hàng đợi gửi và nhận. Đó là nơi các byte ngồi cho đến khi một cái gì đó ở tầng ứng dụng xử lý chúng. Nếu hàng đợi nhận được lấp đầy không có máy khách được kết nối nào có thể gửi thông tin cho đến khi có khoảng trống trong hàng đợi. Đây là lý do tại sao một ứng dụng phải xử lý các yêu cầu càng nhanh càng tốt.

Nếu bạn đang sử dụng hệ thống * nix, bạn có thể sử dụng netstat để xem số byte hiện tại trong hàng đợi gửi và nhận. Trong ví dụ này, có 0 byte trong hàng đợi nhận và 240 byte trong hàng đợi gửi (đang đợi hệ điều hành gửi đi).

Proto Recv-Q Send-Q Local Address    Foreign Address    State 
tcp  0  240 x.x.x.x:22     x.x.x.x:*     LISTEN 

Trên Linux, bạn có thể kiểm tra kích thước mặc định và tối đa được phép kích thước của gửi/nhận hàng đợi với hệ thống tập tin proc:

Receive: 

cat /proc/sys/net/core/rmem_default 
cat /proc/sys/net/core/rmem_max 

Send: 

cat /proc/sys/net/core/wmem_max 
cat /proc/sys/net/core/wmem_default 
+0

Vì vậy, bạn đang nói Node.js trả lời trên hệ điều hành để xếp hàng các yêu cầu, nó không có thực hiện riêng của mình để xử lý hàng đợi, là nó chính xác? –

+0

Có, không có gì huyền diệu về Node.js, giống như mọi ứng dụng khác, nó phụ thuộc vào hệ điều hành để xử lý lớp mạng. – Michael

+0

Tôi vẫn còn bối rối. Tôi chỉ đọc 'Điều này trái ngược với mô hình đồng thời phổ biến hơn ngày nay, nơi các luồng hệ điều hành được sử dụng' từ trang [about] (https://nodejs.org/about/) của Node. Có vẻ như Nodej không sử dụng chuỗi hệ điều hành, không chắc tôi hiểu chính xác. –

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