ABOUT ME

-

Today
-
Yesterday
-
Total
-
  • 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(이벤트) : 해당 이벤트에 콜백 함수가 몇 개 등록되어 있는지

     

Designed by Tistory.