Сообщение от Safort
|
kobezzza,
можно пару слов о том, как потоки внутри устроены?
Я просто не представляю как их возможно сделать без setInterval/setTimeout.
//в код не иду, т.к. всё равно мало что пойму)
|
Общая схема проста:
Есть планировщик потоков и он на каждой итерации событийного цикла выбирает из очереди потоков те, которые выполнятся в рамках текущей итерации, причём общее время всех операций должно быть не более 60мс.
Логично, что чем выше приоритет, тем выше шанс что поток попадёт на исполнение и его максимальное время исполнения.
Само разбиение операции использует yield, т.е. после каждой итерации Collection считается затраченое время и если оно больше дозволенного, то операция прерывается (yield).
Если очередь потоков не пуста, то раз в заданный момент времени (по setTimeout) планировщик опять выбирает потоки для запуска и выполняет.
https://github.com/kobezzza/Collecti...rEach.es6#L688