Тема: Collection v5
Показать сообщение отдельно
  #87 (permalink)  
Старый 12.09.2014, 18:28
Аватар для kobezzza
Быдлокодер;)
Отправить личное сообщение для kobezzza Посмотреть профиль Найти все сообщения от kobezzza
 
Регистрация: 19.11.2010
Сообщений: 4,338

Сообщение от Safort Посмотреть сообщение
kobezzza,
можно пару слов о том, как потоки внутри устроены?
Я просто не представляю как их возможно сделать без setInterval/setTimeout.
//в код не иду, т.к. всё равно мало что пойму)
Общая схема проста:

Есть планировщик потоков и он на каждой итерации событийного цикла выбирает из очереди потоков те, которые выполнятся в рамках текущей итерации, причём общее время всех операций должно быть не более 60мс.

Логично, что чем выше приоритет, тем выше шанс что поток попадёт на исполнение и его максимальное время исполнения.

Само разбиение операции использует yield, т.е. после каждой итерации Collection считается затраченое время и если оно больше дозволенного, то операция прерывается (yield).

Если очередь потоков не пуста, то раз в заданный момент времени (по setTimeout) планировщик опять выбирает потоки для запуска и выполняет.

https://github.com/kobezzza/Collecti...rEach.es6#L688
__________________
kobezzza
code monkey
Ответить с цитированием