CORE.ASYNC и 10000 процессов для анимации - какова фактическая выгода в этом сценарии?

StackOverflow https://stackoverflow.com//questions/21033068

Вопрос

Как мы знаем - Core.async использует CSP и похоже на groutines from go-lang . Теперь для сценария, такого как Выбрать и alt Это имеет большое значение .

David Nolen сделал Удивительная демонстрация здесь, показывающая CREAR.ASYNC в Clojure на работе в анимации в clojuescript.

Но я могу воспроизвести аналогичную функциональность с простым для цикла. Вы можете увидеть Demo здесь .

function animationLoop() {
    for (var i =0;i<100;i++) {
        for (var j= 0; j<100;j++) {
            //decision to animate or hold off
            var decisionRange = randomInt(0,10);
            if (decisionRange < 1) {
                var cell = document.getElementById('cell-' + i + j);
                cell.innerHTML = randomInt(0,9);
                cell.setAttribute('class','group' + randomInt(0,5));
            }
        }
    }
}
.

Мой вопрос Какова фактическая выгода Core.Async в сценарии анимации 10 000 процессов?

Это было полезно?

Решение

Цель демонстрации заключается в продемонстрировании достижения параллелизма в clojurecript с core.async. Большие победы в написании всех нитей в стандартной, последовательной моды, не требуя от разрыва их в обратных вызовах или управлять взаимосвязью вручную, а в иллюзии блокировки на каналах (включая каналы тайм-аута; блокируя, генеракодицетагкод. для других одновременных генеракодицетагодов). Конечно, есть еще нет параллелизма , но это полностью ортогональная концепция 1 ; Использование потоков в Apps GUI была полезной техникой задолго до того, как многоязычные процессоры стали обычным явлением.

Полученный код делает такие вещи, как частоту обновления, а также скорость генерации обновления. Возможно, вы можете приблизиться к четкости с циклами go и GeneracodicCode в этом конкретном случае, потому что все генерирующие обновления генеракодицетагкоды делают то же самое, но запуск нескольких генеракодицетагкодов, чтобы сделать совершенно разные вещи, будет одинаково простым.


1 см. Для примера Параллелизм /= совпадение Саймон Марлоу или Параллелизм не совпадает Роберт Харпер для расширенного обсуждения этот момент.

Другие советы

Как вы, вероятно, знаете, что JavaScript является одиночной резьбой, и если вы используете CORE.ASYNC с точки зрения «фактического выполнения / операций», вы не получите большую пользу, но когда ваш код на основе LOOP сравнивается с кодом CORE.ASYNCВ среде выполнения, которая использует все ядра CPU (например, JVM), вы увидите преимущество Async Code.

Итак, в основном, если у вас есть несколько чистых GenaCodicetacodcode (без функций HECEDENTION на функциях среды выполнения, как DOM и т. Д.), что вы написали с помощью Core.Async, то вы можете легко запускать один и тот же код в браузере или на заднем плане MULTICORE CPUИ вы будете использовать все ядра CPU.Это несколько на линиях отделения «деноциональной семантики» и «оперативной семантики» вашего кода.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top