ObjectWorker
Worker 객체는 프로그램 내에서 생성되고 처리될 수 있는 자식 스레드를 생성하는 데 사용되는 객체입니다. Worker 객체는 기본 스레드와 다른 스레드에서 실행되는 JavaScript 프로세스로 이해될 수 있습니다. Worker는 메인 스레드와 메모리를 공유하지 않고 메인 스레드를 차단하지 않는 주류 비동기 프로그래밍 방식입니다.
Worker 객체의 생성자는 다음과 같습니다.
1new Worker(String path, Object opts = {})
안에,path매개변수는 새 스레드의 JavaScript 파일 경로를 지정합니다. 예를 들어 다음 내용으로 work.js 파일을 작성할 수 있습니다.
1
2
3
4const {
Worker
} = require('worker_threads');
console.log('Hi from worker');
기본 프로그램에서 다음 코드를 사용하여 work.js를 실행합니다.
1
2
3
4const {
Worker
} = require('worker_threads');
const worker = new Worker('path/to/work.js');
실행 후 기본 프로그램 콘솔에 "Hi from Worker" 출력이 표시되는 것을 볼 수 있습니다.
다음 예에서는 장기 실행 계산이 있고 이를 다른 스레드에 넣어 기본 스레드에서 이 계산에 의해 차단되지 않고 처리하려고 한다고 가정합니다. 코드는 아래와 같이 표시됩니다.
메인 스레드:
1
2
3
4
5
6
7
8
9
10
11
12const {
Worker
} = require('worker_threads');
// create a worker thread
const fib = new Worker(__dirname + '/fib-worker.js');
// receive the result from the worker thread
fib.onmessage = (ev) => {
console.log('result: ', ev.data);
};
fib.postMessage(40);
console.log('main thread still working');
이번 예제에서는 피보나치 수열 계산을 처리하기 위해 Worker 객체의 생성자를 통해 워커 스레드를 생성하고, 메인 스레드는 postMessage() 메소드를 통해 워커 스레드에 데이터를 전달하고, onmessage 이벤트를 통해 처리 결과를 얻는다. . 동시에 메인 스레드는 이 컴퓨팅 작업이 작업자 스레드에 '위임'되었으며 계속해서 다른 작업을 처리할 수 있음을 증명하기 위해 '아직 작동 중' 메시지를 표시합니다.
작업자 스레드 코드 스타일은 다음과 같습니다.
1
2
3
4
5
6
7
8
9
10
11
12// fib-worker.js
Master.onmessage = (ev) => {
const n = ev.data;
const result = fib(n);
// Once the calculation has been completed, the result is sent back to the main thread.
Master.postMessage(result);
};
function fib(n) {
if (n <= 1) return n;
return fib(n - 1) + fib(n - 2);
}
작업자 스레드에서는 항목 매개변수 postMessage()를 통해 메인 스레드가 보낸 메시지를 듣고 지정된 피보나치 수열을 계산한 후 Master.postMessage() 메서드를 통해 계산 결과를 다시 메인 스레드로 보냈습니다.
가장 기본적인 Worker 예제입니다. Worker 객체를 사용하여 개발할 때 메인 스레드와 작업자 스레드는 완전히 비동기적입니다. 각 Worker 객체는 별도의 스레드입니다. 메인 스레드에서 인스턴스화된 Worker 객체는 어떤 블록도 생성하지 않습니다.
상속관계
건설자
Worker
작업자 객체 생성자
1
2new Worker(String path,
Object opts = {});
호출 매개변수:
- path: 문자열, 작업자 항목 스크립트를 지정하고 절대 경로만 허용합니다.
- opts: 객체, 구성 옵션, 아직 지원되지 않음
정적 속성
defaultMaxListeners
정수, 기본 전역 최대 리스너 수
1static Integer Worker.defaultMaxListeners;
구성원 속성
onload
함수, 쿼리 및 바인딩은 on("load", func);에 해당하는 로드 메시지 이벤트를 허용합니다.
1Function Worker.onload;
onmessage
함수, 쿼리 및 바인딩은 on("message", func);에 해당하는 postMessage 메시지 이벤트를 허용합니다.
1Function Worker.onmessage;
onerror
함수, 쿼리 및 바인딩은 on("error", func);에 해당하는 오류 메시지 이벤트를 허용합니다.
1Function Worker.onerror;
멤버 함수
postMessage
마스터나 워커에게 메시지를 보내고,
1Worker.postMessage(Value data);
호출 매개변수:
- data: 값, 전송된 메시지의 내용을 지정합니다.
on
이벤트 핸들러를 객체에 바인딩
1
2Object Worker.on(String ev,
Function func);
호출 매개변수:
- ev: 문자열, 이벤트 이름을 지정합니다.
- func: 함수, 이벤트 처리 함수를 지정합니다.
결과 반환:
- Object, 체인 호출을 용이하게 하기 위해 이벤트 객체 자체를 반환합니다.
이벤트 핸들러를 객체에 바인딩
1Object Worker.on(Object map);
호출 매개변수:
- map: Object, 이벤트 매핑 관계를 지정하며, 객체 속성 이름이 이벤트 이름으로 사용되고 속성 값이 이벤트 처리 함수로 사용됩니다.
결과 반환:
- Object, 체인 호출을 용이하게 하기 위해 이벤트 객체 자체를 반환합니다.
addListener
이벤트 핸들러를 객체에 바인딩
1
2Object Worker.addListener(String ev,
Function func);
호출 매개변수:
- ev: 문자열, 이벤트 이름을 지정합니다.
- func: 함수, 이벤트 처리 함수를 지정합니다.
결과 반환:
- Object, 체인 호출을 용이하게 하기 위해 이벤트 객체 자체를 반환합니다.
이벤트 핸들러를 객체에 바인딩
1Object Worker.addListener(Object map);
호출 매개변수:
- map: Object, 이벤트 매핑 관계를 지정하며, 객체 속성 이름이 이벤트 이름으로 사용되고 속성 값이 이벤트 처리 함수로 사용됩니다.
결과 반환:
- Object, 체인 호출을 용이하게 하기 위해 이벤트 객체 자체를 반환합니다.
prependListener
이벤트 핸들러를 객체의 원점에 바인딩
1
2Object Worker.prependListener(String ev,
Function func);
호출 매개변수:
- ev: 문자열, 이벤트 이름을 지정합니다.
- func: 함수, 이벤트 처리 함수를 지정합니다.
결과 반환:
- Object, 체인 호출을 용이하게 하기 위해 이벤트 객체 자체를 반환합니다.
이벤트 핸들러를 객체의 원점에 바인딩
1Object Worker.prependListener(Object map);
호출 매개변수:
- map: Object, 이벤트 매핑 관계를 지정하며, 객체 속성 이름이 이벤트 이름으로 사용되고 속성 값이 이벤트 처리 함수로 사용됩니다.
결과 반환:
- Object, 체인 호출을 용이하게 하기 위해 이벤트 객체 자체를 반환합니다.
once
일회성 이벤트 핸들러를 객체에 바인딩합니다. 일회성 핸들러는 한 번만 트리거됩니다.
1
2Object Worker.once(String ev,
Function func);
호출 매개변수:
- ev: 문자열, 이벤트 이름을 지정합니다.
- func: 함수, 이벤트 처리 함수를 지정합니다.
결과 반환:
- Object, 체인 호출을 용이하게 하기 위해 이벤트 객체 자체를 반환합니다.
일회성 이벤트 핸들러를 객체에 바인딩합니다. 일회성 핸들러는 한 번만 트리거됩니다.
1Object Worker.once(Object map);
호출 매개변수:
- map: Object, 이벤트 매핑 관계를 지정하며, 객체 속성 이름이 이벤트 이름으로 사용되고 속성 값이 이벤트 처리 함수로 사용됩니다.
결과 반환:
- Object, 체인 호출을 용이하게 하기 위해 이벤트 객체 자체를 반환합니다.
prependOnceListener
이벤트 핸들러를 객체의 원점에 바인딩
1
2Object Worker.prependOnceListener(String ev,
Function func);
호출 매개변수:
- ev: 문자열, 이벤트 이름을 지정합니다.
- func: 함수, 이벤트 처리 함수를 지정합니다.
결과 반환:
- Object, 체인 호출을 용이하게 하기 위해 이벤트 객체 자체를 반환합니다.
이벤트 핸들러를 객체의 원점에 바인딩
1Object Worker.prependOnceListener(Object map);
호출 매개변수:
- map: Object, 이벤트 매핑 관계를 지정하며, 객체 속성 이름이 이벤트 이름으로 사용되고 속성 값이 이벤트 처리 함수로 사용됩니다.
결과 반환:
- Object, 체인 호출을 용이하게 하기 위해 이벤트 객체 자체를 반환합니다.
off
객체 처리 대기열에서 기능 할당 취소
1
2Object Worker.off(String ev,
Function func);
호출 매개변수:
- ev: 문자열, 이벤트 이름을 지정합니다.
- func: 함수, 이벤트 처리 함수를 지정합니다.
결과 반환:
- Object, 체인 호출을 용이하게 하기 위해 이벤트 객체 자체를 반환합니다.
객체 처리 대기열의 모든 기능 취소
1Object Worker.off(String ev);
호출 매개변수:
- ev: 문자열, 이벤트 이름을 지정합니다.
결과 반환:
- Object, 체인 호출을 용이하게 하기 위해 이벤트 객체 자체를 반환합니다.
객체 처리 대기열에서 기능 할당 취소
1Object Worker.off(Object map);
호출 매개변수:
- map: Object, 이벤트 매핑 관계를 지정하며, 객체 속성 이름을 이벤트 이름으로 사용하고, 해당 속성의 값을 이벤트 처리 함수로 사용합니다.
결과 반환:
- Object, 체인 호출을 용이하게 하기 위해 이벤트 객체 자체를 반환합니다.
removeListener
객체 처리 대기열에서 기능 할당 취소
1
2Object Worker.removeListener(String ev,
Function func);
호출 매개변수:
- ev: 문자열, 이벤트 이름을 지정합니다.
- func: 함수, 이벤트 처리 함수를 지정합니다.
결과 반환:
- Object, 체인 호출을 용이하게 하기 위해 이벤트 객체 자체를 반환합니다.
객체 처리 대기열의 모든 기능 취소
1Object Worker.removeListener(String ev);
호출 매개변수:
- ev: 문자열, 이벤트 이름을 지정합니다.
결과 반환:
- Object, 체인 호출을 용이하게 하기 위해 이벤트 객체 자체를 반환합니다.
객체 처리 대기열에서 기능 할당 취소
1Object Worker.removeListener(Object map);
호출 매개변수:
- map: Object, 이벤트 매핑 관계를 지정하며, 객체 속성 이름을 이벤트 이름으로 사용하고, 해당 속성의 값을 이벤트 처리 함수로 사용합니다.
결과 반환:
- Object, 체인 호출을 용이하게 하기 위해 이벤트 객체 자체를 반환합니다.
removeAllListeners
객체의 처리 대기열에서 모든 이벤트에 대한 모든 리스너를 취소합니다. 이벤트가 지정된 경우 지정된 이벤트에 대한 모든 리스너를 제거합니다.
1Object Worker.removeAllListeners(String ev);
호출 매개변수:
- ev: 문자열, 이벤트 이름을 지정합니다.
결과 반환:
- Object, 체인 호출을 용이하게 하기 위해 이벤트 객체 자체를 반환합니다.
객체의 처리 대기열에서 모든 이벤트에 대한 모든 리스너를 취소합니다. 이벤트가 지정된 경우 지정된 이벤트에 대한 모든 리스너를 제거합니다.
1Object Worker.removeAllListeners(Array evs = []);
호출 매개변수:
- evs: 배열, 이벤트 이름 지정
결과 반환:
- Object, 체인 호출을 용이하게 하기 위해 이벤트 객체 자체를 반환합니다.
setMaxListeners
호환성만을 위한 리스너 수의 기본 제한
1Worker.setMaxListeners(Integer n);
호출 매개변수:
- n: 정수, 이벤트 수를 지정합니다.
getMaxListeners
호환성만을 위해 기본 제한 수의 리스너를 가져옵니다.
1Integer Worker.getMaxListeners();
결과 반환:
- Integer, 기본 제한 수량을 반환합니다.
listeners
객체의 지정된 이벤트에 대한 리스너 배열을 쿼리합니다.
1Array Worker.listeners(String ev);
호출 매개변수:
- ev: 문자열, 이벤트 이름을 지정합니다.
결과 반환:
- Array, 지정된 이벤트에 대한 리스너 배열을 반환합니다.
listenerCount
객체의 지정된 이벤트에 대한 리스너 수를 쿼리합니다.
1Integer Worker.listenerCount(String ev);
호출 매개변수:
- ev: 문자열, 이벤트 이름을 지정합니다.
결과 반환:
- Integer, 지정된 이벤트에 대한 리스너 수를 반환합니다.
객체의 지정된 이벤트에 대한 리스너 수를 쿼리합니다.
1
2Integer Worker.listenerCount(Value o,
String ev);
호출 매개변수:
- o: 값, 쿼리 개체를 지정합니다.
- ev: 문자열, 이벤트 이름을 지정합니다.
결과 반환:
- Integer, 지정된 이벤트에 대한 리스너 수를 반환합니다.
eventNames
쿼리 리스너 이벤트 이름
1Array Worker.eventNames();
결과 반환:
- Array, 이벤트 이름의 배열을 반환합니다.
emit
이벤트를 적극적으로 트리거
1
2Boolean Worker.emit(String ev,
...args);
호출 매개변수:
- ev: 문자열, 이벤트 이름
- args: ..., 이벤트 매개변수가 이벤트 처리 함수에 전달됩니다.
결과 반환:
- Boolean, 이벤트 트리거 상태를 반환하고, 응답 이벤트가 있으면 true를 반환하고, 그렇지 않으면 false를 반환합니다.
toString
객체의 문자열 표현을 반환하며 일반적으로 "[Native Object]"를 반환하며 객체 자체의 특성에 따라 다시 구현될 수 있습니다.
1String Worker.toString();
결과 반환:
- String, 객체의 문자열 표현을 반환합니다.
toJSON
객체의 JSON 형식 표현을 반환하며 일반적으로 객체에 의해 정의된 읽을 수 있는 속성 컬렉션을 반환합니다.
1Value Worker.toJSON(String key = "");
호출 매개변수:
- key: 문자열, 사용되지 않음
결과 반환:
- Value, 직렬화 가능한 JSON을 포함하는 값을 반환합니다.