λ³Έλ¬Έ λ°”λ‘œκ°€κΈ°
ComputerScience πŸ“š/운영체제

[OS] μŠ€λ ˆλ“œ ν’€(thread pool)

by μ•ˆμ£Όν˜• 2022. 2. 14.

 

μŠ€λ ˆλ“œ ν’€

 

[OS] μŠ€λ ˆλ“œμ™€ 병행성(Thread & Concurrency)

μŠ€λ ˆλ“œμ™€ 병행성(Threads & Concurrency) μš°λ¦¬λŠ” 이전에 μ •λ¦¬ν–ˆλ‹€μ‹œν”Ό ν”„λ‘œμ„ΈμŠ€ λͺ¨λΈμ€ ν•œ ν”„λ‘œμ„ΈμŠ€κ°€ ν•˜λ‚˜μ˜ μ œμ–΄ μŠ€λ ˆλ“œλ‘œ ν”„λ‘œκ·Έλž¨μ„ μ‹€ν–‰ν•œλ‹€κ³  κ°€μ •ν•˜μ˜€μŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬λ‚˜ 거의 λͺ¨λ“  ν˜„λŒ€ 운영체제

dkswnkk.tistory.com

이전인 μœ„ κΈ€μ—μ„œ 닀쀑 μŠ€λ ˆλ“œλ‘œ κ΅¬μ„±λœ μ›ΉλΈŒλΌμš°μ €λ₯Ό μ„€λͺ…ν–ˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬ν•œ μ›Ή μ„œλΉ„μŠ€λŠ” μš”μ²­μ„ 받을 λ•Œλ§ˆλ‹€ κ·Έ μš”μ²­μ„ μœ„ν•œ μƒˆλ‘œμš΄ μŠ€λ ˆλ“œλ₯Ό λ§Œλ“€μ–΄ μ€λ‹ˆλ‹€. μƒˆλ‘œμš΄ μŠ€λ ˆλ“œλ₯Ό 맀 μš”μ²­λ§ˆλ‹€ λ§Œλ“€μ–΄ μ£ΌλŠ” 것은, κ·Έλ•Œλ§ˆλ‹€ μƒˆλ‘œμš΄ ν”„λ‘œμ„ΈμŠ€λ₯Ό λ§Œλ“€μ–΄μ£ΌλŠ” κ²ƒλ³΄λ‹€λŠ” ν™•μ‹€νžˆ 더 μ§„λ³΄λœ λ°©λ²•μž„μ€ ν‹€λ¦Όμ—†μ§€λ§Œ, 닀쀑 μŠ€λ ˆλ“œ μ„œλ²„λŠ” 아직도 μ—¬λŸ¬ 문제λ₯Ό 가지고 μžˆμŠ΅λ‹ˆλ‹€. 첫 번째 λ¬Έμ œλŠ” μ„œλΉ„μŠ€ν•  λ•Œλ§ˆλ‹€ μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•˜λŠ” 데 μ†Œμš”λ˜λŠ” μ‹œκ°„μž…λ‹ˆλ‹€. 특히 이 μŠ€λ ˆλ“œλŠ” 이 일만 λλ‚˜λ©΄ 곧μž₯ μš©λ„ 폐기될 κ²ƒμ΄λΌλŠ” 점을 염두에 두면 더 κ·Έλ ‡μŠ΅λ‹ˆλ‹€. 두 번째 μ΄μŠˆλŠ” 더 μ‹¬κ°ν•œ μ΄μŠˆμž…λ‹ˆλ‹€. λͺ¨λ“  μš”μ²­λ§ˆλ‹€ μƒˆ μŠ€λ ˆλ“œλ₯Ό λ§Œλ“€μ–΄μ„œ μ„œλΉ„μŠ€ν•΄ μ€€λ‹€λ©΄ μ‹œμŠ€ν…œμ—μ„œ λ™μ‹œμ— μ‹€ν–‰ν•  수 μžˆλŠ” μ΅œλŒ€ μŠ€λ ˆλ“œ μˆ˜κ°€ λͺ‡ κ°œκΉŒμ§€ κ°€λŠ₯ν•  수 μžˆλŠ” 것인지 ν•œκ³„λ₯Ό μ •ν•΄μ•Ό ν•©λ‹ˆλ‹€. μŠ€λ ˆλ“œλ₯Ό λ¬΄ν•œμ • λ§Œλ“€λ©΄ μ–Έμ  κ°€λŠ” CPU μ‹œκ°„, λ©”λͺ¨λ¦¬ 곡간 같은 μ‹œμŠ€ν…œ μžμ›μ΄ κ³ κ°ˆλ©λ‹ˆλ‹€. μ΄λŸ¬ν•œ λ¬Έμ œλ“€μ„ ν•΄κ²°ν•΄ 쀄 수 μžˆλŠ” λ°©λ²•μ˜ ν•˜λ‚˜κ°€ μŠ€λ ˆλ“œ ν’€(pool)μž…λ‹ˆλ‹€.

 μŠ€λ ˆλ“œ ν’€μ˜ κΈ°λ³Έ μ•„μ΄λ””μ–΄λŠ” ν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹œμž‘ν•  λ•Œ μ•„μ˜ˆ μΌμ •ν•œ 수의 μŠ€λ ˆλ“œλ“€μ„ 미리 ν’€λ‘œ λ§Œλ“€μ–΄λ‘λŠ” κ²ƒμž…λ‹ˆλ‹€. 이 μŠ€λ ˆλ“œλ“€μ€ ν‰μ†Œμ—λŠ” ν•˜λŠ” 일 없이 일감을 κΈ°λ‹€λ¦¬κ²Œ λ©λ‹ˆλ‹€. μ„œλ²„λŠ” μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•˜μ§€ μ•Šκ³  μš”μ²­μ„ λ°›μœΌλ©΄ λŒ€μ‹  μŠ€λ ˆλ“œ 풀에 μ œμΆœν•˜κ³  μΆ”κ°€ μš”μ²­ λŒ€κΈ°λ₯Ό μž¬κ°œν•©λ‹ˆλ‹€. 풀에 μ‚¬μš© κ°€λŠ₯ν•œ μŠ€λ ˆλ“œκ°€ 있으면 κΉ¨μ–΄λ‚˜κ³  μš”μ²­μ΄ μ¦‰μ‹œ μ„œλΉ„μŠ€λ©λ‹ˆλ‹€. μŠ€λ ˆλ“œκ°€ μ„œλΉ„μŠ€λ₯Ό μ™„λ£Œν•˜λ©΄ ν’€λ‘œ λŒμ•„κ°€μ„œ 더 λ§Žμ€ μž‘μ—…μ„ κΈ°λ‹€λ¦½λ‹ˆλ‹€. 풀에 제좜된 μž‘μ—…μ„ λΉ„λ™κΈ°μ μœΌλ‘œ μ‹€ν–‰ν•  μˆ˜μžˆλŠ” 경우 μŠ€λ ˆλ“œ 풀이 μ œλŒ€λ‘œ μž‘λ™ν•©λ‹ˆλ‹€.

 μŠ€λ ˆλ“œ 풀은 μ•„λž˜μ™€ 같은 μž₯점을 κ°€μ§€κ²Œ λ©λ‹ˆλ‹€.

  1. μƒˆ μŠ€λ ˆλ“œλ₯Ό λ§Œλ“€μ–΄ 주기보닀 κΈ°μ‘΄ μŠ€λ ˆλ“œλ‘œ μ„œλΉ„μŠ€ν•΄ μ£ΌλŠ” 것이 μ’…μ’… 더 λΉ λ₯΄λ‹€.
  2. μŠ€λ ˆλ“œ 풀은 μž„μ˜ μ‹œκ°μ— μ‘΄μž¬ν•  μŠ€λ ˆλ“œ κ°œμˆ˜μ— μ œν•œμ„ λ‘”λ‹€. μ΄λŸ¬ν•œ μ œν•œμ€ λ§Žμ€ 수의 μŠ€λ ˆλ“œλ₯Ό 병렬 μ²˜λ¦¬ν•  수 μ—†λŠ” μ‹œμŠ€ν…œμ— 도움이 λœλ‹€.
  3. νƒœμŠ€ν¬λ₯Ό μƒμ„±ν•˜λŠ” 방법을 νƒœμŠ€ν¬λ‘œλΆ€ν„° λΆ„λ¦¬ν•˜λ©΄ νƒœμŠ€ν¬λ₯Ό 싀행을 λ‹€λ₯΄κ²Œ ν•  수 μžˆλ‹€. 예λ₯Ό λ“€μ–΄ νƒœμŠ€ν¬λ₯Ό 일정 μ‹œκ°„ 후에 μ‹€ν–‰λ˜λ„λ‘ μŠ€μΌ€μ€„ ν•˜κ±°λ‚˜ ν˜Ήμ€ 주기적으둜 μ‹€ν–‰μ‹œν‚¬ 수 μžˆλ‹€.

 μŠ€λ ˆλ“œ 풀에 μžˆλŠ” μŠ€λ ˆλ“œμ˜ κ°œμˆ˜λŠ” CPU 수, 물리 λ©”λͺ¨λ¦¬ μš©λŸ‰, λ™μ‹œ μš”μ²­ ν΄λΌμ΄μ–ΈνŠΈ μ΅œλŒ€ 개수 등을 κ³ λ €ν•˜μ—¬ μ •ν•΄μ§ˆ 수 μžˆμŠ΅λ‹ˆλ‹€. 더 μ •κ΅ν•˜κ²Œ ν•˜λ €λ©΄ ν’€μ˜ ν™œμš©λ„λ₯Ό 보며 λ™μ μœΌλ‘œ ν’€μ˜ 크기λ₯Ό λ°”κΎΈμ–΄ 쀄 μˆ˜λ„ μžˆμŠ΅λ‹ˆλ‹€. κ·ΈλŸ¬ν•œ κ΅¬μ‘°λŠ” μ‹œμŠ€ν…œ λΆ€ν•˜κ°€ 적을 λ•Œμ—λŠ” 더 μž‘μ€ 풀을 μœ μ§€ν•˜λ„λ‘ ν•¨μœΌλ‘œμ¨ λ©”λͺ¨λ¦¬ λ“±μ˜ μ†Œλͺ¨λ₯Ό 더 쀄일 수  μžˆμŠ΅λ‹ˆλ‹€.

λŒ“κΈ€