더북(TheBook)

이번에는 좀 더 실전적인 예제로 소수의 개수를 구하는 작업을 워커 스레드를 통해 해보겠습니다. 소수를 찾는 작업은 연산이 많이 들어가는 대표적인 작업입니다.

먼저 워커 스레드를 사용하지 않은 예제입니다.

prime.js

const min = 2;
const max = 10000000;
const primes = [];

function findPrimes(start, range) {
  let isPrime = true;
  const end = start + range;
  for (let i = start; i < end; i++) {
    for (let j = min; j < Math.sqrt(end); j++) {
      if (i !== j && i % j === 0) {
        isPrime = false;
        break;
      }
    }
    if (isPrime) {
      primes.push(i);
    }
    isPrime = true;
  }
}

console.time('prime');
findPrimes(min, max);
console.timeEnd('prime');
console.log(primes.length);

2부터 1,000만까지의 숫자 중에 소수가 모두 몇 개 있는지를 알아내는 코드입니다. 코드를 실행해보겠습니다.

콘솔

$ node prime
prime: 8.745s
664579

사용자의 컴퓨터 성능에 따라 다르지만 상당한 시간이 소요됩니다. 이번에는 워커 스레드를 사용해 여러 개의 스레드가 문제를 나눠서 풀도록 해보겠습니다. 미리 말하지만, 멀티 스레딩은 상당히 어렵습니다. 코드양도 많아집니다.

신간 소식 구독하기
뉴스레터에 가입하시고 이메일로 신간 소식을 받아 보세요.