및 와 같은 메소드를 제공하며,이 방법은 계산, 프로세스 데이터 및 집계 단편화 결과를 병렬로 수행하는 데 사용됩니다.
spawn
map
reduce
SMT를 사용하려면 병렬 코드, 즉 단일 결과를 얻기 위해 병렬로 실행되는 코드를 작성해야합니다. 대부분의 순차적 코드는 병렬화하기 어렵거나 비효율적이기 때문에 일반적으로 특수 알고리즘을 고려해야합니다. 그 이유는 Amdahl 's Law입니다.이 법은 가속 비율이 다음 공식에 의해 주어진다는 것을 나타냅니다.
여기서 n
는 평행 작업자 (예 : 프로세서, 코어 또는 스레드)의 수이며 p
는 평행 부분입니다. 앞으로 병렬 알고리즘에 의존하는 더 많은 멀티 코어 아키텍처가 사용될 수 있습니다. 고성능 컴퓨팅 분야에서 GPU 시스템 및 Intel Xeon Phi와 같은 특수 아키텍처는 이러한 플랫폼을 나타냅니다. 마지막으로 일반적인 동시 응용 프로그램 또는 알고리즘과 병렬 실행을 구별해야합니다. 병렬 처리는 계산의 (아마도 관련 적) 동시 실행입니다. 반대로, 동시성은 독립적 인 실행 프로세스의 조합입니다.
기능 감소 기능은 단편화 된 결과를 단일 결과로 집계하는 데 도움이됩니다. 모든 하위 성분을 알고 난 후에 해당 변수를 수집하고 특정 작업을 수행하기위한 편리한 추상화를 제공합니다.
paralleljs 를 가진 병렬 js의 faqs (faq)
메소드는 데이터 배열의 각 항목에 함수를 적용하는 데 사용됩니다. 이 함수는 메소드에 문자열로 전달됩니다. 예를 들어, "var p = 새로운 병렬 ([1, 2, 3]); p.reduce ( 'function (a, b) {return a b;}');"
의 멀티 스레딩
window.addEventListener('message', function (event) {
event.source.postMessage('Howdy Cowboy!', event.origin);
}, false);
onmessage = function (event) {
var arguments = JSON.parse(event.data);
run(arguments.start, arguments.end);
};
function run (start, end) {
var n = start;
while (n < end) {
var k = Math.sqrt(n);
var found = false;
for (var i = 2; !found && i <= k; i++) {
found = n % i === 0;
}
if (!found) {
postMessage(n.toString());
}
n++;
}
}
물론, 우리는 그러한 마법 숫자 (13과 14)보다 더 나은 솔루션을 원할 수 있으며 브라우저에 따라 Blob 및 CreateObjecturl의 폴백을 사용해야합니다. JavaScript 전문가가 아닌 경우 fs.substr (13, fs.length -14)는 기능 본문을 추출하는 것입니다. 함수 선언을 문자열로 변환하고 (toString ()로 호출)과 함수 자체의 서명을 제거함으로써이를 수행합니다. 병렬 js가 도움이 될 수 있습니까? if (typeof Worker !== 'undefined') {
var w = new Worker('prime.js');
w.onmessage = function(event) {
console.log(event);
};
var args = { start : 100, end : 10000 };
w.postMessage(JSON.stringify(args));
}
var fs = (function () {
/* code for the worker */
}).toString();
var blob = new Blob(
[fs.substr(13, fs.length - 14)],
{ type: 'text/javascript' }
);
var url = window.URL.createObjectURL(blob);
var worker = new Worker(url);
// Now setup communication and rest as before
window.addEventListener('message', function (event) {
event.source.postMessage('Howdy Cowboy!', event.origin);
}, false);
위 코드의 문제는 계산이 실제로 평행하지 않다는 것입니다. 전체 데이터 배열을 한 번에 처리하는 단일 배경 작업자 만 만듭니다. 전체 배열을 처리 한 후에 만 결과를 얻을 수 있습니다. 더 나은 솔루션은 병렬 인스턴스의 맵 함수를 사용하는 것입니다. onmessage = function (event) {
var arguments = JSON.parse(event.data);
run(arguments.start, arguments.end);
};
function run (start, end) {
var n = start;
while (n < end) {
var k = Math.sqrt(n);
var found = false;
for (var i = 2; !found && i <= k; i++) {
found = n % i === 0;
}
if (!found) {
postMessage(n.toString());
}
n++;
}
}
if (typeof Worker !== 'undefined') {
var w = new Worker('prime.js');
w.onmessage = function(event) {
console.log(event);
};
var args = { start : 100, end : 10000 };
w.postMessage(JSON.stringify(args));
}
결론
병렬 js에서
메소드를 사용하는 방법은 무엇입니까?
ParallelJS의 .map()
.map()
메소드에 문자열로 전달됩니다. 그런 다음 결과를 새 배열로 반환하십시오. 예를 들어, "var p = 새로운 병렬 ([1, 2, 3]); p.map ( 'function (n) {return n * 2;}');" ] 새로운 배열. .map()
병렬 js의
메소드는 지정된 함수를 사용하여 데이터 배열을 단일 값으로 줄이는 데 사용됩니다. 이 함수는 .reduce()
ParallelJS의 .reduce()
.reduce()
.map()
.reduce()
메소드를 사용하여 작업자 컨텍스트에 라이브러리를 포함시켜야합니다. ParallelJS는 모든 데이터 처리 작업에 적합합니까?
ParallelJS는 대규모 데이터 세트에서 처리 시간을 크게 높일 수 있지만 모든 작업에 가장 적합한 선택은 아닐 수 있습니다. 소규모 데이터 세트의 경우 작업자 생성 및 데이터 전송의 오버 헤드가 병렬화의 이점을 능가 할 수 있습니다. 특정 사용 사례를 사용하여 병렬 JS를 테스트하여 성능 장점을 제공하는지 확인하는 것이 좋습니다.
위 내용은 병렬 js와 병렬 자바 스크립트의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!