Pergunta

Como sabemos - núcleo.assíncrono usa CSP e é semelhante ao goroutines a partir de go-lang.Agora, para um cenário como selecione e alt isso faz muito sentido.

David Nolen tem feito uma incrível demonstração mostrando aqui core.assíncrono em Clojure no trabalho em animação em ClojureScript.

Ainda que eu possa replicar uma funcionalidade semelhante com um simples loop for.Você pode ver um demo aqui.

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));
            }
        }
    }
}

A minha pergunta é Qual é o real benefício do núcleo.assíncrono no 'de 10.000 processos de animação cenário"?

Foi útil?

Solução

O objetivo da demonstração é demonstrar a consecução de concorrência em ClojureScript com o núcleo.assíncrono.As grandes vitórias são, por escrito todas as threads de um padrão, de forma sequencial, sem a necessidade de dividi-los em retornos de chamada ou gerenciar a intercalação pela mão, e na ilusão de bloqueio de canais (incluindo o tempo de espera canais;através do bloqueio, um go rendimentos de controle para outros concorrentes gos).É claro que ainda não há paralelismo, mas este é um completamente ortogonais conceito1;usando threads em aplicações GUI foi uma técnica útil muito antes de CPUs multicore, tornou-se lugar-comum.

O código resultante faz coisas como a taxa de atualização e a taxa de atualização de geração imediatamente aparente.Você provavelmente poderia chegar perto em clareza com for loops e setTimeout neste caso particular, porque todos a atualização de geração de gos fazer a mesma coisa, mas o lançamento de vários gos para fazer coisas completamente diferentes seria igualmente simples.


1 Ver, por exemplo, Paralelismo /= Simultaneidade por Simon Marlowe ou O paralelismo não é de simultaneidade por Robert Harper para uma longa discussão deste ponto.

Outras dicas

Como você provavelmente sabe que o javascript é único thread e se você usar o núcleo.assíncrona em termos de "execução real/operações" você não vai obter muitos benefícios, mas quando o loop com o código é comparado com o core.assíncrono de código em um ambiente de tempo de execução que usa todos os núcleos da CPU (como o JVM), em seguida, você vai ver o benefício de desempenho de código assíncrono.

Então, basicamente, se você tem algum pura algorithmic code (sem depedency no ambiente de tempo de execução, como DOM, etc.) que você tem escrito usando o core.assíncrono, em seguida, você pode facilmente executar o mesmo código no navegador OU no seu back-end de múltiplos núcleos de CPU e você vai ter de usar todos os núcleos da CPU.Isso é um pouco sobre as linhas de separar o "denoational semântica" e "operacional semântica" de seu código.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top