Core.Async 및 애니메이션을위한 10,000 개의 프로세스 -이 시나리오에서 실제 이점은 무엇입니까?

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

문제

알고있는대로 - Core.Async 사용 CSP 와 유사하며 Lang rang 에서 에서 에서 에서 이제 선택 및 alt 이것은 많은 의미가 있습니다 .

David NoLen은 여기에 Clojure에서 Clojure에서 core.async 를 보여주는 놀라운 데모를했습니다. Clojurescript의 애니메이션에서.

그러나 루프가 간단한 비슷한 기능을 복제 할 수 있습니다. 여기에서 데모를 볼 수 있습니다 .

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

내 질문은 '10, 000 프로세스 애니메이션 시나리오 '에서 core.async의 실제 이점은 무엇입니까?

도움이 되었습니까?

해결책

데모의 목적은 Core.Async를 사용하여 ClojureScript에서 동시성 을 달성하는 것입니다. 큰이기는 표준, 순차적 인 방식으로 모든 스레드를 콜백으로 분리하거나 손으로 인터리빙을 관리 할 필요없이, 그리고 채널을 차단하는 환상에서 (차단함으로써, BLOCHENTENT COLTROL 다른 동시 발전소 코딩에). 물론 병렬 처리 은 아직 없지만 완전히 직교하는 개념 1 입니다. GUI 응용 프로그램의 스레드를 사용하면 멀티 코어 CPU가 일반적으로 됨으로써 유용한 기술이었습니다.

결과 코드는 즉시 재생 속도 및 업데이트 생성 비율과 같은 것들을 즉시 나타냅니다. 모든 업데이트 생성 gos가 동일한 것을 수행하지만 완전히 다른 일을 수행하기 위해 여러 개의 go를 시작하기 때문에 이러한 특정 사례를 수행하기 때문에이 특별한 경우에는 for 루프 및 setTimeout로 Clerity가 완전히 닫을 수 있습니다.


1 예를 들어 병렬 처리 /= 동시성 Simon Marlowe 또는 병렬 처리는 동시성이 아닙니다 robert harper가 확장 된 토론에 대한 이 점.

다른 팁

자바 스크립트가 단일 스레드임을 알고 있고 "실제 실행 / 작업"이라는면에서 Core.Async를 사용하는 경우 많은 이점을 얻지 만 루프 기반 코드가 Core.Async 코드와 비교 될 때JVM과 같은 모든 CPU 코어를 사용하는 런타임 환경에서 비동기 코드의 성능 이점을 볼 수 있습니다.

그래서 기본적으로 Core.Async를 사용하여 작성한 순수한 algorithmic code (런타임 환경 기능, 런타임 환경 기능에 대한 런타임 환경 기능에 대한 표현 없음)가있는 경우 브라우저 또는 백엔드 멀티 코어 CPU에서 동일한 코드를 쉽게 실행할 수 있습니다.그리고 모든 CPU 코어를 사용하게됩니다.이는 코드의 "Denoational Semantics"및 "운영시기"를 분리하는 줄에 다소 다소 다소 다소

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top