Crypto

NodejsλŠ” Single Threadκ°€ μ•„λ‹ˆλ‹€.

μœ μ €κ°€ μ‚¬μš©κ°€λŠ₯ ν•œ μ˜μ—­μ—μ„œ Single thread라고 봐도 λ λ“―ν•œλ‹€.

crypto.pbkdf2λŠ” λ³„λ„μ˜ μ“°λ ˆλ“œμ—μ„œ μž‘λ™ν•œλ‹€.

const crypto = require('crypto');

const startDate = Date.now();
crypto.pbkdf2('bugtype', 'javascript', 100000, 512, 'sha512', () => {
  console.log('JOB 1 : ', Date.now() - startDate);
});

crypto.pbkdf2('bugtype', 'javascript', 100000, 512, 'sha512', () => {
  console.log('JOB 2 : ', Date.now() - startDate);
});

crypto.pbkdf2('bugtype', 'javascript', 100000, 512, 'sha512', () => {
  console.log('JOB 3 : ', Date.now() - startDate);
});

crypto.pbkdf2('bugtype', 'javascript', 100000, 512, 'sha512', () => {
  console.log('JOB 4 : ', Date.now() - startDate);
});

crypto.pbkdf2('bugtype', 'javascript', 100000, 512, 'sha512', () => {
  console.log('JOB 5 : ', Date.now() - startDate);
});

crypto.pbkdf2('bugtype', 'javascript', 100000, 512, 'sha512', () => {
  console.log('JOB 6 : ', Date.now() - startDate);
});

crypto.pbkdf2('bugtype', 'javascript', 100000, 512, 'sha512', () => {
  console.log('JOB 7 : ', Date.now() - startDate);
});

crypto.pbkdf2('bugtype', 'javascript', 100000, 512, 'sha512', () => {
  console.log('JOB 8 : ', Date.now() - startDate);
});

crypto.pbkdf2('bugtype', 'javascript', 100000, 512, 'sha512', () => {
  console.log('JOB 9 : ', Date.now() - startDate);
});
// κ²°κ³Ό ( ν•„μžλŠ” μΏΌλ“œμ½”μ–΄ )
JOB 2 :  542
JOB 4 :  548
JOB 3 :  549
JOB 1 :  552
// λ‹€μŒ μž‘μ—…
JOB 7 :  1077
JOB 5 :  1077
JOB 8 :  1077
JOB 6 :  1079
// λ‹€μŒ μž‘μ—…
JOB 9 :  1584

ν•„μžλŠ” μΏΌλ“œμ½”μ–΄μ˜ CPUλ₯Ό 가지고 μžˆλ‹€. κ·Έλž˜μ„œ 4κ°œμ”© μž‘μ—…μ΄ λœλ‹€.

CPUλ‹Ή ν•˜λ‚˜μ˜ Threadλ₯Ό μ‚¬μš©ν•˜κΈ°μ— λ‹€μŒκ³Ό 같은 μ‹œκ°„μ΄ κ±Έλ Έλ‹€.

그러면 Thread의 μ‚¬μ΄μ¦ˆλ₯Ό λ³€κ²½ν•  수 μ—†μ„κΉŒ?

process.env.UV_THREADPOOL_SIZE = 8; //  제일 μœ„μ— μ„ μ–Έ

μœ„μ™€ 같은 μ˜΅μ…˜μ„ μ€˜μ„œ λ°”κΏ€ 수 μžˆλ‹€.

JOB 1 :  1222
JOB 7 :  1245
JOB 2 :  1247
JOB 3 :  1253
JOB 6 :  1255
JOB 4 :  1262
JOB 8 :  1265
JOB 5 :  1270
// λ‹€μŒ μž‘μ—…
JOB 9 :  1747

κ²°κ³ΌλŠ” μœ„μ™€ κ°™λ‹€. 근데 κ²°κ³Όλ₯Ό 보면 μ•Œκ² μ§€λ§Œ, 1~4번의 μž‘μ—…μ΄ μ²˜μŒλ³΄λ‹€ 2배의 μ‹œκ°„μ΄ κ±Έλ Έλ‹€.

μ™œλƒλ©΄ ν•˜λ‚˜μ˜ CPUμ—μ„œ 2개의 Threadκ°€ λ™μ‹œμ— μž‘μ—…μ„ ν•˜κ²Œ λ˜λŠ”λ° κ·Έλž˜μ„œ 2배의 μ‹œκ°„μ΄ 걸리게 λœλ‹€. κ·ΈλŒ€μ‹  1~8번의 μž‘μ—…μ€ λ™μ‹œμ— λλ‚˜κ²Œ λœλ‹€.

Last updated

Was this helpful?