Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/clojure/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Clojure core.async和10000个动画进程-在这种情况下,实际的好处是什么?_Clojure_Clojurescript_Goroutine_Core.async - Fatal编程技术网

Clojure core.async和10000个动画进程-在这种情况下,实际的好处是什么?

Clojure core.async和10000个动画进程-在这种情况下,实际的好处是什么?,clojure,clojurescript,goroutine,core.async,Clojure,Clojurescript,Goroutine,Core.async,正如我们所知,这与我们的研究结果相似。现在来看一个类似于和alt的场景 大卫·诺伦在《Clojure》中完成了《ClojureScript》中的动画创作 但我可以用一个简单的for循环复制类似的功能。你可以看到一个 函数animationLoop(){ 对于(var i=0;i,您可能知道javascript是单线程的,如果您在“实际执行/操作”方面使用core.async,您将不会获得太多好处,但是当您的基于循环的代码与使用所有CPU核心(如JVM)的运行时环境中的core.async代码相比

正如我们所知,这与我们的研究结果相似。现在来看一个类似于和alt的场景

大卫·诺伦在《Clojure》中完成了《ClojureScript》中的动画创作

但我可以用一个简单的for循环复制类似的功能。你可以看到一个

函数animationLoop(){

对于(var i=0;i,您可能知道javascript是单线程的,如果您在“实际执行/操作”方面使用core.async,您将不会获得太多好处,但是当您的基于循环的代码与使用所有CPU核心(如JVM)的运行时环境中的core.async代码相比较时然后您将看到异步代码的性能优势


因此,基本上,如果您有一些纯
算法代码(不依赖于运行时环境特性,如DOM等),并且是使用core.async编写的,那么您可以轻松地在浏览器或后端多核CPU上运行相同的代码,您将可以使用所有CPU核。这有点类似于将“指称语义学”与“操作语义学”演示的目的是演示使用core.async在ClojureScript中实现并发性。最大的成功在于以标准的顺序方式编写所有线程,而无需将它们拆分为回调或手动管理交错,并在通道阻塞的幻觉中实现(包括超时通道;通过阻塞,
go
将控制权让给其他并发的
go
s)。当然,仍然没有并行性,但这是一个完全正交的概念1;在GUI应用程序中使用线程在多核CPU普及之前很久就是一种有用的技术

由此产生的代码使刷新率和更新生成率等事情立即变得显而易见。在这种特殊情况下,您可能会使用
for
循环和
setTimeout
来清晰地接近,因为所有生成
go
s的更新都做相同的事情,但是启动多个
go
s来完成完全不同的事情也同样简单



我想这是一个有10000次迭代的循环,而不是10000次“伪循环”-线程可以包含它们自己的逻辑,也就是说,这段代码并不代表10000个进程,尽管我知道答案,但所有优秀的背景信息都让你读起来很棒!@lgrapenthin干杯,很高兴听到这个消息。
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));
            }
        }
    }
}