스레드풀과 커스텀 이벤트

김무연·2023년 12월 13일

Backend

목록 보기
23/49

fs, crypto, zlib 등의 모듈의 메서드를 실행할 때는 백그라운드에서 거의 동시에 실행됨

스레드풀이 동시에 처리해 줌 (4개 동시에 처리)

const crypto = require('crypto');

const pass = 'pass';
const salt = 'salt';
const start = Date.now();

crypto.pbkdf2(pass, salt, 1_000_000, 128, 'sha512', () => {
  console.log('1', Date.now() - start);
})
crypto.pbkdf2(pass, salt, 1_000_000, 128, 'sha512', () => {
  console.log('2', Date.now() - start);
})
crypto.pbkdf2(pass, salt, 1_000_000, 128, 'sha512', () => {
  console.log('3', Date.now() - start);
})
crypto.pbkdf2(pass, salt, 1_000_000, 128, 'sha512', () => {
  console.log('4', Date.now() - start);
})
crypto.pbkdf2(pass, salt, 1_000_000, 128, 'sha512', () => {
  console.log('5', Date.now() - start);
})
crypto.pbkdf2(pass, salt, 1_000_000, 128, 'sha512', () => {
  console.log('6', Date.now() - start);
})
crypto.pbkdf2(pass, salt, 1_000_000, 128, 'sha512', () => {
  console.log('7', Date.now() - start);
})
crypto.pbkdf2(pass, salt, 1_000_000, 128, 'sha512', () => {
  console.log('8', Date.now() - start);
})

위와 같이 cyprot로 암호화를 해주는 작업이 8개가 실행이 되면 몇 개씩 동시에 시작이 되는지 확인해보면 아래와 같다

4개씩 그룹이 묶여 작업이 진행되는 것을 확인할 수 있다, 하지만 이러한 경우 내 컴퓨터의 코어는 8개 달려있는데 4개만 사용하는 거라고 비효율적일 수도 있다.

따라서 터미널에

위와 같이 SET UV_THREADPOOL_SIZE = 숫자 로 몇개를 한 번에 돌릴지를 정해서, 내 컴퓨터의 사양에 맞게 설정해 줄 수 있다. (코어 개수에 맞게가 효율)

커스텀 이벤트

클릭, 마우스 커서 옮기기, 스크롤 내리기..등등 여러 이벤트들이 있지만, 커스텀 이벤트를 통해 나만의 커스텀 이벤트를 만들어 줄 수 있다.

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'));
profile
Notion에 정리된 공부한 글을 옮겨오는 중입니다... (진행중)

0개의 댓글