Guest User

Untitled

a guest
May 30th, 2021
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.73 KB | None | 0 0
  1.  
  2. const workerCode = `
  3. function isPrime(num) {
  4. for (let i = 2; i < num / 2 + 1; i++)
  5. if (num % i === 0) return false;
  6. return num > 1;
  7. }
  8.  
  9. function sumPrimes(start, end) {
  10. let sum = 0;
  11.  
  12. for (let i = start; i <= end; i++)
  13. if (isPrime(i)) sum += i;
  14.  
  15. return sum;
  16. }
  17.  
  18. self.onmessage = function (e) {
  19. let startPrime = parseInt(e.data[0]);
  20. let endPrime = parseInt(e.data[1]);
  21.  
  22. let sum = sumPrimes(startPrime, endPrime)
  23.  
  24. postMessage(sum);
  25.  
  26. };
  27. `;
  28.  
  29. const workerBlob = new Blob([workerCode], {type: 'application/javascript'});
  30.  
  31. async function sumPrimes(num){
  32.  
  33. return new Promise((resolve, reject) => {
  34. const THREAD_COUNT = navigator.hardwareConcurrency;
  35.  
  36. let pice = Math.floor(num / THREAD_COUNT);
  37. let lastPice = pice + num % THREAD_COUNT;
  38.  
  39. let sum = 0;
  40.  
  41. let end = 0;
  42.  
  43. let threadCompleted = 0;
  44.  
  45. for(let i = 1; i <= THREAD_COUNT; i++){
  46.  
  47. let p = i == THREAD_COUNT ? pice : lastPice;
  48.  
  49. end += p;
  50. start = end - p + 1;
  51.  
  52. //console.log(start, end);
  53.  
  54. let worker = new Worker(URL.createObjectURL(workerBlob));
  55. worker.postMessage([start, end]);
  56.  
  57. worker.onmessage = function(e) {
  58. sum += e.data;
  59.  
  60. threadCompleted++;
  61. if(threadCompleted == THREAD_COUNT)
  62. resolve(sum);
  63.  
  64. }
  65.  
  66. }
  67.  
  68. });
  69.  
  70. }
  71.  
  72. (async () => {
  73. console.time('sumPrimes');
  74. let sum = await sumPrimes(300000);
  75. console.timeEnd('sumPrimes');
  76.  
  77. console.log("Sum:", sum);
  78. })();
Advertisement
Add Comment
Please, Sign In to add comment