0

10million 값 배열을 정렬하려고합니다. 에서 신기술을 발견했습니다. Napa.js멀티 스레딩 with Node.js를 사용할 수 있습니다. 거기에서 우리는 다음 코드를 사용하십시오Node.js Napajs와의 병렬 작업

:

const napa = require('napajs') 
const zone = napa.zone.create('zone', { workers: 4 }); 
zone.execute((...args) => { 
    // here I can take anything I want to execute in a native thread 
    // but it is also possible to implement shared memory for all 
    // threads, but I can't find out how 
}, [args]) 

를 할당 무엇 나를 이해하는 데 도움이됩니다. 처리기 란 무엇입니까?TransferContext 사용 방법은이 작업에 필요합니다.

적어도 내 스레드에 대한 공유 메모리를 만드는 데이 모든 지식을 사용하는 방법은 무엇입니까?

답변

1

업데이트 :

Napa.js는 (> = 0.2.0) 지금 복사하지 않고 같은 SharedArrayBuffer으로 내장 타입 자바 스크립트 수송 지원합니다. 이 문제에 대해서는 예제 Parallel Quick Sort을 찾을 수 있습니다.


이것은 흥미로운 문제입니다. 현재 Napa.js에서는 기본적으로 worker간에 전달되는 인수가 serialize/deserialize됩니다. 복사하지 않고 작업자간에 배열을 공유하는 더 나은 솔루션을 원할 수 있습니다.

  1. 우리 주 JS 글의 10M 값을 유지하도록 INT32 배열을 사용한다고 가정 :

    I는 다음과 같은 가능성을 보았다.
  2. 배열의 원시 포인터를 가져 오려면 v8 :: Int32Array :: Buffer() :: Externalize()를 통해 addon을 만듭니다. (이것으로 사용자는 메모리를 관리 할 수 ​​있고, 수명주기 관리가 필요할 수도 있습니다.)
  3. 원시 포인터를 다른 작업자에게 전달합니다.
  4. Worker는 (외부화 된 ArrayBuffer를 통해) 원시 포인터에서 v8 :: Int32Array 을 생성합니다.

이 패턴은 너무 일반적이어서 Napa.js에 포함시키는 것이 좋습니다. 기능 요청은 Introduce Buffer class that can be transferred across workers without copying입니다.

BTW, TransportContext은 한 작업자에서 다른 작업자로 std::shared_ptr을 전송하는 데 사용됩니다.이 경우에는 작업자간에 배열을 공유하는 방법에 대해 더 많이 생각합니다.

+0

답변 해 주셔서 감사합니다. 귀하의 [로드맵] (https://github.com/Microsoft/napajs/wiki/roadmap)처럼. 이러한 일들이 이루어 지길 고대합니다. –