-
2-15. 노드 스레드풀과 커스텀 이벤트Node.js 2023. 4. 12. 17:13
I. 스레드풀 알아보기
fs, crypto, zlib 모듈의 메서드를 실행할 때는 백그라운드에서 동시에 실행됨
- 스레드풀이 동시에 처리해줌
- 무턱대고 동시에 실행되는 것이 아니라, 4개씩 동시에 실행됨
const crypto = require('crypto'); const pass = 'pass'; const salt = 'salt'; const start = Date.now(); crypto.pbkdf2(pass, salt, 1000000, 128, 'sha512', () => { console.log('1:', Date.now() - start); }); crypto.pbkdf2(pass, salt, 1000000, 128, 'sha512', () => { console.log('2:', Date.now() - start); }); crypto.pbkdf2(pass, salt, 1000000, 128, 'sha512', () => { console.log('3:', Date.now() - start); }); crypto.pbkdf2(pass, salt, 1000000, 128, 'sha512', () => { console.log('4:', Date.now() - start); }); crypto.pbkdf2(pass, salt, 1000000, 128, 'sha512', () => { console.log('5:', Date.now() - start); }); crypto.pbkdf2(pass, salt, 1000000, 128, 'sha512', () => { console.log('6:', Date.now() - start); }); crypto.pbkdf2(pass, salt, 1000000, 128, 'sha512', () => { console.log('7:', Date.now() - start); }); crypto.pbkdf2(pass, salt, 1000000, 128, 'sha512', () => { console.log('8:', Date.now() - start); });
- 빨간줄을 기준으로 4개씩 나눠서 실행됨
✨process.env 의 UV_THREADPOOL_SIZE=8
- 스레드풀의 사이즈를 8개로 결정하는 메서드
- 8개를 동시에 실행 가능
- 리눅스, 맥에선 UV_THREADPOOL_SIZE=8
- 윈도우에서는 SET UV_THREADPOOL_SIZE=8 처럼, 앞에 SET 을 붙여야함
II. 커스텀 이벤트
✨커스텀 이벤트 예제
- 이벤트 패턴으로 여러 파일간의 동작을 공유할 수 있음
// event.js const EventEmitter = require('events'); const myEvent = new EventEmitter(); myEvent.addListener('event1', () => { console.log('이벤트 1'); }); myEvent.on('event2', () => { console.log('이벤트 2'); }); myEvent.on('event2', () => { console.log('이벤트 2 추가'); }); myEvent.once('event3', () => { console.log('이벤트 3'); }); // 한 번만 실행됨 myEvent.emit('event1'); // 이벤트 호출 myEvent.emit('event2'); // 이벤트 호출 myEvent.emit('event3'); myEvent.emit('event3'); // 실행 안 됨 myEvent.on('event4', () => { console.log('이벤트 4'); }); myEvent.removeAllListeners('event4'); myEvent.emit('event4'); // 실행 안 됨 const listener = () => { console.log('이벤트 5'); }; myEvent.on('event5', listener); myEvent.removeListener('event5', listener); myEvent.emit('event5'); // 실행 안 됨 console.log(myEvent.listenerCount('event2'));
- EventEmitter 생성자를 사용하여 나만의 커스텀 이벤트를 만들기
- myEvent.on(이벤트, 콜백함수) : addListener 의 별명
- myEvent.once(이벤트, 콜백함수) : 몇번을 실행하던 딱 한번만 실행됨
- myEvent.emit(이벤트) : 이벤트 호출
- myEvent.removeAllListeners(이벤트) : 해당 이벤트를 모두 지우고 싶을 때
- myEvent.removeListener(이벤트, 콜백함수 변수) : 콜백함수 변수에 해당하는 이벤트 하나만 지우고 싶을 때
- myEvent.listenerCount(이벤트) : 해당 이벤트에 콜백 함수가 몇 개 등록되어 있는지
'Node.js' 카테고리의 다른 글
3-1. 노드 HTTP 서버와 클라이언트 (0) 2023.04.13 2-16. 노드 에러 처리하기(예외 처리하기) (0) 2023.04.12 2-14. 노드 pipe와 스트림 메모리 효율 확인하기 (0) 2023.04.12 2-13. 노드 버퍼와 스트림의 모든 것 (0) 2023.04.12 2-12. 노드 파일 시스템 사용하기 (0) 2023.04.12