Мне было интересно, знает ли кто-нибудь, как setTimeout реализован в node.js. Кажется, я где-то читал, что это не часть V8. Я быстро попытался найти реализацию, но не смог найти ее в источнике (BIG). Я нашел, например, файл timers.js, который затем, например, ссылается на timer_wrap.cc. Но этот файл не полностью отвечает на все мои вопросы.
- Есть ли у V8 реализация
setTimeout
? Я думаю, также из источника ответа нет. -
Как реализовано
setTimeout
? javascript или родной или сочетание обоих? Из timers.js я предполагаю что-то вдоль линии обоих:var Timer = process.binding('timer_wrap').Timer;`
-
При добавлении нескольких таймеров (setTimeout) как node.js знает, что выполнить в первую очередь? Добавляет ли он все таймеры в коллекцию (сортируется)? Если он отсортирован, то поиск тайм-аута, который должен быть выполнен, - это O (1) и O (log n) для вставки? Но опять же в timers.js я вижу, что они используют связанный список?
- Но опять же добавление большого количества таймеров не является проблемой вообще?
-
При выполнении этого script:
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); }
вы получаете немного загрузки процессора, но не так много?
- Мне интересно, реализую ли я все эти обратные вызовы один за другим в отсортированном списке, если я получу лучшую производительность?