Tôi đã tự hỏi liệu có ai biết cách setTimeout được triển khai trong node.js. Tôi tin rằng tôi đã đọc ở đâu đó rằng đây không phải là một phần của V8. Tôi nhanh chóng cố gắng để tìm việc thực hiện, nhưng không thể tìm thấy nó trong nguồn (BIG). Tôi ví dụ tìm thấy tập tin timers.js này, mà sau đó ví dụ liên kết đến timer_wrap.cc. Nhưng những tập tin này không hoàn toàn trả lời tất cả các câu hỏi của tôi.Cách setTimeout được triển khai trong node.js
- V8 có thực hiện
setTimeout
không? Tôi đoán cũng từ nguồn câu trả lời là không. Cách thực hiện
setTimeout
? javascript hoặc bản địa hoặc kết hợp cả hai? Từ timers.js tôi giả cái gì đó dọc theo dòng của cả hai:var Timer = process.binding('timer_wrap').Timer;`
Khi thêm nhiều giờ (setTimeout) như thế nào Node.js biết để thực hiện đầu tiên? Liệu nó thêm tất cả các bộ đếm thời gian vào một bộ sưu tập (được sắp xếp)? Nếu nó được sắp xếp thì tìm ra thời gian chờ cần thực hiện là O (1) và O (log n) để chèn? Nhưng sau đó một lần nữa trong timers.js tôi thấy họ sử dụng một danh sách liên kết?
- Nhưng sau đó lại thêm nhiều bộ tính giờ không phải là vấn đề?
Khi thực hiện kịch bản này:
var x = new Array(1000), len = x.length; /** * Returns a random integer between min and max * Using Math.round() will give you a non-uniform distribution! */ function getRandomInt (min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; } var y = 0; for (var i = 0; i < len; i++) { var randomTimeout = getRandomInt(1000, 10000); console.log(i + ', ' + randomTimeout + ', ' + ++y); setTimeout(function() { console.log(arguments); }, randomTimeout, randomTimeout, y); }
bạn nhận được một chút sử dụng CPU nhưng không có nhiều?
- Tôi tự hỏi liệu tôi có thực hiện tất cả các cuộc gọi lại này trong danh sách được sắp xếp nếu tôi sẽ có hiệu suất tốt hơn không?
trong ví dụ này, thời gian chờ luôn giống nhau? 60 giây? – Alfred
Vì vậy, bạn muốn có một số điều xảy ra trong 60 giây và bạn đang cố gắng tìm ra liệu có nên gộp tất cả những thứ đó lại với nhau hay tạo ra một setTimeout cho từng thứ riêng biệt không? –
không xin lỗi. Tài liệu mà bạn liên kết có độ trễ 60 giây. Sự chậm trễ của tôi có thể là bất cứ điều gì và rất nhiều! – Alfred