이번에는 좀 더 실전적인 예제로 소수의 개수를 구하는 작업을 워커 스레드를 통해 해보겠습니다. 소수를 찾는 작업은 연산이 많이 들어가는 대표적인 작업입니다.
먼저 워커 스레드를 사용하지 않은 예제입니다.
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
사용자의 컴퓨터 성능에 따라 다르지만 상당한 시간이 소요됩니다. 이번에는 워커 스레드를 사용해 여러 개의 스레드가 문제를 나눠서 풀도록 해보겠습니다. 미리 말하지만, 멀티 스레딩은 상당히 어렵습니다. 코드양도 많아집니다.