Môi trường javascript của nút có phải là luồng đơn, hay mọi thứ xảy ra cùng một lúc? Hoặc (nhiều khả năng) không làm những câu lệnh đó giải thích những gì đang xảy ra với nút.Giải thích các cuộc gọi lại của nút và luồng đơn
Tôi mới tham gia nút và cố gắng hiểu cách thức xử lý cuộc gọi lại. Việc googling về chủ đề của tôi không được chứng minh hiệu quả và dường như có nhiều đối tượng sử dụng các cụm từ như "chủ đề, khóa và chuỗi đơn" với ngữ cảnh khác nhau cho từng đối tượng và tôi không có đủ kinh nghiệm với nút để phân tích cú pháp chính xác những gì tôi đang đọc.
Từ những gì tôi đã đọc, môi trường thực thi javascript của nút là, giống như một trình duyệt, một chuỗi. Đó là, mặc dù tất cả mọi thứ được thiết kế xung quanh callbacks không đồng bộ, tất cả mọi thứ xảy ra theo một thứ tự xác định, và không bao giờ có hai chủ đề sửa đổi cùng một biến hoặc chạy báo cáo cùng một lúc. Tôi cũng đã đọc điều này có nghĩa là một lập trình viên-người sử dụng nút không phải lo lắng về khóa ngữ nghĩa.
Nếu anh ở dưới trình duyệt đất đai và sử dụng một trong các thư viện javascript phổ biến để thiết lập một callback phi dom-event-handler, một cái gì đó giống như
console.log("Here");
$.each([1,2,3],function(){
console.log("-- inside the callback --");
});
console.log("There");
đầu ra của tôi là luôn
Here
-- inside the callback --
-- inside the callback --
-- inside the callback --
There
Tuy nhiên, nếu tôi làm điều gì đó như thế này với gọi lại trong nút js (chạy nó dưới dạng tập lệnh shell từ dòng lệnh)
var function example()
{
var fs = require('fs');
console.log("Here");
fs.readdir('/path/to/folder', function(err_read, files){
console.log('-- inside the callback --');
});
console.log("There");
for(var i=0;i<10000;i++)
{
console.log('.');
}
}
example();
console.log("Reached Top");
tôi liên tục (dường như - xem "không nhiều kinh nghiệm" ở trên) có được kết quả như thế này
Here
There
.
. (repeat 10,000 times)
Reached Top
-- inside the callback --
Đó là, nút kết thúc thực hiện các chức năng example
trước khi gọi gọi lại.
Đây có phải là hành vi xác định trong nút không? Hoặc có lần gọi lại sẽ được gọi trước khi chức năng example
kết thúc không? Hoặc nó sẽ phụ thuộc vào việc thực hiện trong thư viện bằng cách sử dụng gọi lại?
Tôi hiểu ý tưởng đằng sau nút là viết mã dựa trên sự kiện - nhưng tôi đang cố hiểu nút nào thực sự đang hoạt động và hành vi nào có thể dựa vào và điều gì không thể.
có thể trùng lặp của [NodeJS thực sự là một luồng đơn?] (Http://stackoverflow.com/questions/7018093/is-nodejs-really-single-threaded) hoặc [NodeJS event loop] (http: // stackoverflow .com/questions/10680601/nodejs-event-loop) – Bergi
Đối với những người trùng lặp - tôi đã thấy câu hỏi đó trước khi hỏi. Nó trả lời câu hỏi "Liệu nút chính nó có sử dụng chủ đề nội bộ" hay không. Câu hỏi của tôi là nhiều hơn "Mô hình thực thi gọi lại của nút trong vùng người dùng javascript" là gì.Sự khác biệt quan trọng, nhưng quan trọng) –