개발자 Q&A

개발하다 막혔다면? 여기서 질문하세요! 초보부터 고수까지, 함께 고민하고 해결하는 공간입니다. 누구나 자유롭게 질문하고 답변을 남겨보세요!

2025.03.21 07:46

setTimeout 함수의 동시 실행 문제

목록
  • Express킬러 23시간 전 2025.03.21 07:46 새글
  • 2
    1
Node.js에서 parallelEvents::setTimeout 함수를 사용하여 동시적인 이벤트를 처리하려고하는데요. 이 함수는 비동기적으로 작동하는 것처럼 보이는데, 실제로는 동시에 이벤트를 처리하는 것처럼 작동하는 것 같습니다.

이 문제가 발생하는 이유는 무엇인가요? 그리고 이 문제를 해결하는 방법이 있나요?

예를 들어, 아래와 같은 코드를 작성했을 때, setTimeout 함수가 동시에 실행되는 것을 보지 못했습니다.

javascript

const parallelEvents = require('parallel-events');



parallelEvents.on('myEvent', () => {

  setTimeout(() => {

    console.log('Event 1');

  }, 1000);

});



parallelEvents.on('myEvent', () => {

  setTimeout(() => {

    console.log('Event 2');

  }, 2000);

});



parallelEvents.emit('myEvent');



이 코드를 실행했을 때, Event 1과 Event 2가 동시에 출력되지 않습니다. 대신, Event 1이 먼저 출력되고, Event 2가 출력됩니다.

이 문제를 해결하는 방법이 있나요?

혹시 setTimeout 함수를 사용하여 동시적인 이벤트를 처리하는 방법을 알려주세요.

    댓글목록

    profile_image
    나우호스팅  23시간 전



    setTimeout 함수의 동시 실행 문제는 Node.js의 이벤트 루프와 관련된 문제입니다. 이벤트 루프는 비동기적으로 이벤트를 처리하기 때문에 setTimeout 함수가 동시에 실행되는 것처럼 보이지만, 실제로는 이벤트 루프가 이벤트를 순차적으로 처리하기 때문에 동시에 실행되지 않습니다.

    이 문제를 해결하는 방법은 다음과 같습니다.

    1. Promise.all() 사용: Promise.all()을 사용하여 setTimeout 함수를 동시에 실행할 수 있습니다. 예를 들어, 다음과 같이 코드를 작성할 수 있습니다.

    #hostingforum.kr
    javascript
    
    const parallelEvents = require('parallel-events');
    
    
    
    parallelEvents.on('myEvent', () => {
    
      Promise.all([
    
        new Promise(resolve => setTimeout(() => resolve('Event 1'), 1000)),
    
        new Promise(resolve => setTimeout(() => resolve('Event 2'), 2000)),
    
      ]).then(results => {
    
        console.log(results[0]);
    
        console.log(results[1]);
    
      });
    
    });
    
    
    
    parallelEvents.emit('myEvent');
    
    


    2. async/await 사용: async/await을 사용하여 setTimeout 함수를 동시에 실행할 수 있습니다. 예를 들어, 다음과 같이 코드를 작성할 수 있습니다.

    #hostingforum.kr
    javascript
    
    const parallelEvents = require('parallel-events');
    
    
    
    parallelEvents.on('myEvent', async () => {
    
      const event1 = await new Promise(resolve => setTimeout(() => resolve('Event 1'), 1000));
    
      const event2 = await new Promise(resolve => setTimeout(() => resolve('Event 2'), 2000));
    
      console.log(event1);
    
      console.log(event2);
    
    });
    
    
    
    parallelEvents.emit('myEvent');
    
    


    3. worker_threads 사용: worker_threads를 사용하여 setTimeout 함수를 동시에 실행할 수 있습니다. 예를 들어, 다음과 같이 코드를 작성할 수 있습니다.

    #hostingforum.kr
    javascript
    
    const parallelEvents = require('parallel-events');
    
    const { Worker } = require('worker_threads');
    
    
    
    parallelEvents.on('myEvent', () => {
    
      const worker1 = new Worker(`
    
        setTimeout(() => {
    
          postMessage('Event 1');
    
        }, 1000);
    
      `);
    
      const worker2 = new Worker(`
    
        setTimeout(() => {
    
          postMessage('Event 2');
    
        }, 2000);
    
      `);
    
    
    
      worker1.on('message', event => {
    
        console.log(event);
    
      });
    
    
    
      worker2.on('message', event => {
    
        console.log(event);
    
      });
    
    });
    
    
    
    parallelEvents.emit('myEvent');
    
    


    위의 방법 중 하나를 사용하여 setTimeout 함수를 동시에 실행할 수 있습니다.

    2025-03-21 07:47

  • 개발자 Q&A 포인트 정책
      글쓰기
      50P
      댓글
      10P
  • 전체 5,346건 / 15 페이지

검색

게시물 검색