Trong các máy chủ web dựa trên PHP (hoặc Java / ASP.NET / Ruby), mọi yêu cầu của máy khách đều được khởi tạo trên một luồng mới. Nhưng trong Node.js, tất cả các máy khách chạy trên cùng một luồng (chúng thậm chí có thể chia sẻ cùng một biến!) Tôi hiểu rằng các thao tác I / O dựa trên sự kiện để chúng không chặn vòng lặp luồng chính.
Điều tôi không hiểu là TẠI SAO tác giả của Node lại chọn nó là một luồng đơn? Nó làm cho mọi thứ khó khăn. Ví dụ: tôi không thể chạy chức năng chuyên sâu CPU vì nó chặn luồng chính (và các yêu cầu máy khách mới bị chặn) vì vậy tôi cần sinh ra một quy trình (có nghĩa là tôi cần tạo một tệp JavaScript riêng và thực hiện quy trình nút khác trên nó). Tuy nhiên, trong PHP cpu, các tác vụ chuyên sâu không chặn các máy khách khác vì như tôi đã đề cập, mỗi máy khách nằm trên một luồng khác nhau. Ưu điểm của nó so với các máy chủ web đa luồng là gì?
Lưu ý: Tôi đã sử dụng phân cụm để khắc phục điều này, nhưng nó không đẹp.
node -e 'setTimeout(()=>{},1000);' & ps -T h $! | wc -l; kill $!
hiển thị năm chủ đề trên hệ thống của tôi. Vòng lặp sự kiện chính là luồng đơn (sẽ không có ý nghĩa gì nếu không) nhưng Node rất đa luồng và bạn có thể viết các ứng dụng xử lý đơn đa luồng nếu muốn. Tôi rất thích viết một câu trả lời toàn diện về nó nhưng một số người đã quyết định đóng câu hỏi của bạn để tôi không thể. Tôi đang bỏ phiếu để mở lại nó. Nếu nó nhận được nhiều phiếu hơn và được mở lại thì hãy đề cập đến tôi trong phần bình luận.