2013-06-07 24 views
25

Máy chủ Node.js rất hiệu quả liên quan đến I/O và số lượng lớn kết nối máy khách. Nhưng tại sao node.js không thích hợp cho các ứng dụng CPU nặng so với một máy chủ đa luồng truyền thống?Tại sao node.js không thích hợp cho các ứng dụng CPU nặng?

tôi đọc nó ở đây Felix Baumgarten

+4

Bất kể sự thật của nó là gì; bạn đã chọn yêu cầu này ở đâu? Tại sao bạn nghĩ rằng đây là trường hợp? – poke

+1

Nếu bạn * biết * rằng nó không phải, sau đó bạn nên * biết * tại sao nó không. Nếu không, bạn chỉ vẫy ý kiến ​​của người khác. – meagar

+0

Tôi đọc ở đây [Felix Baumgarten] (http://nodeguide.com/convincing_the_boss.html) – vuvu

Trả lời

45

Node là, mặc dù mô hình sự kiện không đồng bộ của nó, bởi tính chất đơn ren. Khi bạn khởi chạy một quá trình Node, bạn đang chạy một tiến trình đơn lẻ với một luồng đơn trên một lõi đơn. Vì vậy, mã của bạn sẽ không được thực thi song song, chỉ các hoạt động I/O là song song vì chúng được thực thi không đồng bộ. Như vậy, các nhiệm vụ CPU chạy dài sẽ chặn toàn bộ máy chủ và thường là một ý tưởng tồi.

Cho rằng bạn chỉ bắt đầu quá trình Node như vậy, có thể có nhiều quy trình Node chạy song song. Bằng cách đó bạn vẫn có thể hưởng lợi từ kiến ​​trúc đa luồng của bạn, mặc dù một quá trình Node đơn không. Bạn chỉ cần có một số cân bằng tải ở phía trước để phân phối các yêu cầu cùng với tất cả các quy trình Node của bạn.

Một tùy chọn khác là để CPU hoạt động trong các quy trình riêng biệt và làm cho Node tương tác với những thay vì thực hiện công việc.

thứ liên quan để đọc:

+1

những gì về các chủ đề công nhân làm lưng cuộc gọi, những thuộc về một threadpool theo bài viết này: http: // www.aaronstannard.com/post/2011/12/14/Intro-to-NodeJS-for-NET-Developers.aspx – vuvu

+4

Mã của bạn sẽ không chạy trên các chuỗi công nhân đó.Chúng chỉ được sử dụng khi bạn bắt đầu một cái gì đó không đồng bộ (công cụ I/O), nhưng ngay sau khi chúng gọi lại gọi lại, bạn sẽ quay lại vòng lặp sự kiện. Vì vậy, tất cả các mã bạn viết sẽ được trên một chủ đề duy nhất. – poke

+0

Cảm ơn bạn @ poke !!! – vuvu

10

Một máy chủ Node.js đơn giản là đơn luồng, có nghĩa là bất kỳ hoạt động mà phải mất một thời gian dài để thực hiện sẽ chặn phần còn lại của chương trình của bạn chạy. Các ứng dụng Node.js quản lý để duy trì mức độ đồng thời cao bằng cách làm việc như một loạt các sự kiện. Khi một trình xử lý sự kiện đang chờ đợi một điều gì đó xảy ra (chẳng hạn như đọc từ cơ sở dữ liệu), nó bảo Node tiếp tục và xử lý một sự kiện khác trong thời gian chờ đợi. Nhưng vì một luồng đơn lẻ chỉ có thể thực hiện một lệnh tại một thời điểm, cách tiếp cận này không thể giúp bạn tiết kiệm từ một hàm cần phải tiếp tục hoạt động tích cực trong một thời gian dài. Trong một kiến ​​trúc đa luồng, ngay cả khi một hàm mất một thời gian dài để tính kết quả, các luồng khác vẫn có thể xử lý các yêu cầu khác - và miễn là bạn có một lõi không được sử dụng đầy đủ vào thời điểm đó, có một cơ hội tốt mà chúng có thể làm nó nhanh như thể không có yêu cầu nào khác đang chạy.

Để giải quyết vấn đề này, các ứng dụng Node.js sản xuất dự kiến ​​sẽ tốn nhiều CPU sẽ thường được chạy theo cụm. Điều này có nghĩa là thay vì có một số luồng trong không gian bộ nhớ của một chương trình, bạn chạy một vài phiên bản của cùng một chương trình dưới sự kiểm soát của một cá thể "chính". Mỗi quá trình là đơn luồng, nhưng vì bạn có một số trong số họ, bạn sẽ đạt được những lợi ích của nhiều chủ đề.

+0

Tôi đã đọc bài viết này, chỉ nói rằng vòng lặp sự kiện là một luồng đơn nhưng không phải là sự tính toán để ghi lại các sự kiện, nhìn vào đó là một threadpool trong http://www.aaronstannard.com/post/2011/12/14/ Intro-to-NodeJS-for-NET-Developers.aspx – vuvu

+0

@vuvu: Bài viết đó hơi khó hiểu. Trước tiên, nó giải thích nó một cách không chính xác (gợi ý rằng mỗi trình xử lý sự kiện sẽ có chủ đề riêng), nhưng sau đó giải thích nó một cách chính xác (nhiều hàm tiện ích mà bạn sử dụng trong trình xử lý sự kiện của mình chạy trên một chuỗi nền). , đọc một tập tin). [Bài viết này] (http://blog.mixu.net/2011/02/01/understanding-the-node-js-event-loop/) giải thích rõ ràng hơn. – Chuck

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