2014-04-08 5 views
3

이 질문은 webworker-threads node.js module에 관한 것입니다.webworker-threads를 사용하는 Node.js의 동시성

webworker-threads 모듈의 설명서는 매우 제한되어 있으며 목표를 달성하는 방법에 대한 새롭고 친숙한 예제를 찾을 수 없습니다.

간단히 말해서, 두 개의 CPU 집중 기능이 동시에 실행되어야하며 결과를 반환하고 완료되면 바로 인쇄해야합니다.

enter image description here

는 내가 달성하기 위해 노력하고있어 이것이다 : 이러한 동기 방법이 차단되기 때문에, 내 현재의 모델이있다

enter image description here

내가 더 전문가는 아니지만 및 그러나 내가 할 수있는 webworker-threads 모듈의 Readme.md에 제공된 정보를 저의 상황으로 번역하는 일에 제 머리를 기울이지 마십시오.

나의 현재 해킹-작업 코드는 다음과 같습니다

var Worker = require('webworker-threads').Worker; 

//console.time("worker1"); 
var worker = new Worker(function(){ 
    onmessage = function(event) { 
    postMessage(event.data); 
    self.close(); 
    }; 
}); 
worker.onmessage = function(event) { 
    console.log("Worker1 said : " + event.data); 
}; 
worker.postMessage(work()); 
//console.timeEnd("worker1") 

//console.time("worker2"); 
var worker2 = new Worker(function(){ 
    onmessage = function(event) { 
    postMessage(event.data); 
    self.close(); 
    }; 
}); 
worker2.onmessage = function(event) { 
    console.log("Worker2 said : " + event.data); 
}; 
worker2.postMessage(work2()); 
//console.timeEnd("worker2") 

function work(){ 
    var total = 0; 
    for (var i=0; i<430046534; i++){ 
     total += (i*i*i); 
    } 
    return total; 
} 

function work2(){ 
    var total = 0; 
    for (var i=0; i<630746533; i++){ 
     total += (i*i*i); 
    } 
    return total; 
} 

그러나 슬프게도, 결과에만 두 번째 작업자가 완료 콘솔에 인쇄하고, 나는이를 사용하고도 확실하지 않다 모듈을 올바르게 설치하십시오.

답변

2

작업자의 작업 결과를 작업자에게 게시하고 있습니다. 그 기능을 웹 작업자에게 맡기고 온 메시 지 중에 호출하십시오.

var worker = new Worker(function(){ 
 
    function work(n){ 
 
    var res; 
 
    for (var i = 0; i < n; i++){ 
 
     res += i * i * i; 
 
    } 
 
    return res; 
 
    } 
 
    
 
    onmessage = function(event) { 
 
    var result = work(event.data) 
 
    postMessage(result); 
 
    self.close(); 
 
    }; 
 
});
당신은 서버 측에서 모든 무거운 일을

, 당신은 노동자의 작업을 넣어합니다. 주 스레드에서 작업하면서 전체 서버 스레드를 차단하고 있습니다.