Javascript-форум (https://javascript.ru/forum/)
-   Ваши сайты и скрипты (https://javascript.ru/forum/project/)
-   -   Collection v5 (https://javascript.ru/forum/project/47717-collection-v5.html)

kobezzza 06.09.2014 22:37

То ли осень на меня так действует, то ли ещё чего, но всю эту неделю боролся с тотальной ленью и писал мало кода, а работу над 5.2 нормально возобновил только вчера. Бог даст - завтра закончу часть по коду и можно будет уже пощупать потоки в действии.

kobezzza 12.09.2014 16:08

Закончил работу на версией 5.2. Скоро обновлю документацию.

Сделал небольшой видео обзор: http://www.youtube.com/watch?v=K2GAANmWTgQ

Demo:
http://jsfiddle.net/kobezzza/hut2jhL9/

kobezzza 12.09.2014 17:01

Провёл стресс тестирование:

100 000 потоков ни одного лага
1 000 000 потоков начинает глючить уже :)

Zend 12.09.2014 17:44

чёта у меня демка не запустилась. но потоки меня убедили. заюзаю твою либу :)

kobezzza 12.09.2014 17:46

Цитата:

Сообщение от Zend (Сообщение 330277)
чёта у меня демка не запустилась

Какой браузер? Если хром, то проверь что включен ES6.

chrome://flags/#enable-javascript-harmony и перезапустить браузер

Тестил работу в ФФ, хроме и ноде.

Ноду запускать с флагом
--harmony

Safort 12.09.2014 18:08

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

kobezzza 12.09.2014 18:28

Цитата:

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

Общая схема проста:

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

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

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

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

https://github.com/kobezzza/Collecti...rEach.es6#L688

Safort 12.09.2014 19:58

kobezzza,
спасибо за пояснение)
*ушёл делать конкурента Коллекшену *злобно смеётся* *

kobezzza 12.09.2014 20:03

Цитата:

Сообщение от Safort (Сообщение 330317)
kobezzza,
спасибо за пояснение)
*ушёл делать конкурента Коллекшену *злобно смеётся* *

:D

kobezzza 13.09.2014 12:31

Проверил работу в Safari на маке... чёртовы слоупоки всё ещё не поддерживают генераторы :( Остаётся надежда, что в обещаном релизе Safari 8 они введут поддержку.

Вообще Safari сейчас самый отсталый браузер по поддержки фич и скорости работы. Также не могу найти нормальный ресурс, где пишут о новых фичах / планах новых версий Safari для разработчика, а не для простого пользователя, а то складывается впечатление, что в кроме новой панели вкладок в Safari 8 ничего и нет :)


Часовой пояс GMT +3, время: 14:27.