๋ณธ๋ฌธ ๋ฐ”๋กœ๊ฐ€๊ธฐ
๐Ÿ–ฅ๏ธ ๋ฐฑ์—”๋“œ/Java

[CH.13] ์“ฐ๋ ˆ๋“œ์˜ ๋™๊ธฐํ™”(Lock)

by OR15A 2023. 11. 15.

 ์“ฐ๋ ˆ๋“œ์˜ ๋™๊ธฐํ™”

  • ํ•œ ์“ฐ๋ ˆ๋“œ๊ฐ€ ํŠน์ •์ž‘์—…์„ ๋๋งˆ์น˜๊ธฐ ์ „๊นŒ์ง€, ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ์— ์˜ํ•ด ๋ฐฉํ•ด๋ฐ›์ง€ ์•Š์•„์•ผ ํ•จ.
  • ๋ฉ€ํ‹ฐ์“ฐ๋ ˆ๋“œ ํ”„๋กœ์„ธ์Šค๋Š” ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๊ฐ™์€ ์ž์›์„ ๊ณต์œ ํ•ด์„œ ์ž‘์—…ํ•˜๋ฏ€๋กœ ์„œ๋กœ ์ž‘์—…์— ์˜ํ–ฅ์„ ์คŒ.
  • ์ž„๊ณ„์˜์—ญ : ๊ณต์œ ๋ฐ์ดํ„ฐ(์ž์›)๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ฝ”๋“œ ์˜์—ญ
  • ๋ฝ : ์ž ๊ธˆ, ๊ณต์œ ๋ฐ์ดํ„ฐ์˜ ๋ฝ์„ ํš๋“ํ•œ ๋‹จ ํ•˜๋‚˜์˜ ์“ฐ๋ ˆ๋“œ๋งŒ ์ž„๊ณ„์˜์—ญ ๋‚ด์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ.
  • ๊ฐ์ฒด ๋‹จ์œ„(๋ณ€์ˆ˜๋ฌถ์Œ, ๋ฐ์ดํ„ฐ)๋กœ ๋ฝ์ด ๊ฑธ๋ฆผ. ์ˆ˜ํ–‰ ํ›„์—๋Š” lock์„ ๋ฐ˜๋‚ฉํ•ด์•ผ ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ ์ˆ˜ํ–‰์ด ๊ฐ€๋Šฅํ•จ.
    • โ‘ synchronized๋ฅผ ์ด์šฉํ•œ ๋™๊ธฐํ™”
    • โ‘กwait( )๊ณผ notify( )๋ฅผ ์ด์šฉํ•œ ๋™๊ธฐํ™”
    • โ‘ขLock๊ณผ Condition์„ ์ด์šฉํ•œ ๋™๊ธฐํ™”

 

 

 

์“ฐ๋ ˆ๋“œ ๋™๊ธฐํ™” 3๊ฐ€์ง€ ๋ฐฉ๋ฒ•

synchronized

  • โ‘  ๋ฉ”์„œ๋“œ ์ „์ฒด๋ฅผ ์ž„๊ณ„์˜์—ญ์œผ๋กœ ์ง€์ • 
    • ๋ฐ˜ํ™˜ํƒ€์ž…์•ž์— synchronized๋ถ™์ด๊ธฐ

  • โ‘ก ํŠน์ •ํ•œ ์˜์—ญ์„ ์ž„๊ณ„์˜์—ญ์œผ๋กœ ์ง€์ •
    • synchronized(๊ฐ์ฒด์˜ ์ฐธ์กฐ๋ณ€์ˆ˜)

  • ๋‘ ๋ฐฉ๋ฒ• ๋ชจ๋‘ lock ํš๋“๊ณผ ๋ฐ˜๋‚ฉ์ด ์ž๋™์ ์œผ๋กœ ์ด๋ฃจ์–ด์ง.
  • ๋ชจ๋“  ๊ฐ์ฒด๋Š” lock์„ ํ•˜๋‚˜์”ฉ ๊ฐ–๊ณ  ์žˆ์Œ. ํ•ด๋‹น ๊ฐ์ฒด์˜ lock์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ์“ฐ๋ ˆ๋“œ๋งŒ ์ž„๊ณ„์˜์—ญ์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ์Œ.
  • ์ž„๊ณ„์˜์—ญ์„ ์ตœ์†Œํ™”ํ•ด์•ผ ํšจ์œจ์ ์ธ ํ”„๋กœ๊ทธ๋žจ์ด ๋จ.
  • ์ž๋™์ ์ธ lock์˜ ๊ฑธ๋ฆผ/ํ’€๋ฆผ์ด ํŽธ๋ฆฌํ•จ.
  • ์˜ˆ์™ธ๊ฐ€ ๋ฐœ์ƒํ•ด๋„ lock์ด ์ž๋™์œผ๋กœ ํ’€๋ฆผ.
    • โ†ณ๊ฐ™์€ ๋ฉ”์„œ๋“œ ๋‚ด์—์„œ๋งŒ lock์„ ๊ฑธ ์ˆ˜ ์žˆ๋Š” ์ œ์•ฝ์ด ๋ถˆํŽธํ•จ.

 

 

wait( )๊ณผ notify( )

  • ๋™๊ธฐํ™”๋œ ์ž„๊ณ„์˜์—ญ์˜ ์ฝ”๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋‹ค๊ฐ€ ์ž‘์—…์ด ๋” ์ด์ƒ ์ง„ํ–‰ํ•  ์ƒํ™ฉ์ด ์•„๋‹ ๋•Œ

wait( )ํ˜ธ์ถœ 

  • -์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ฝ์„ ๋ฐ˜๋‚ฉํ•˜๊ณ  ํ•ด๋‹น ๊ฐ์ฒด์˜ ๋Œ€๊ธฐ์‹ค์—์„œ ์žฌ์‹คํ–‰ํ†ต์ง€๋ฅผ ๊ธฐ๋‹ค๋ฆผ.
  • -๋ฐ˜๋‚ฉํ•œ ๋ฝ์€ ๋‹ค๋ฅธ ๊ฐ์ฒด๊ฐ€ ์–ป์–ด์„œ ํ•ด๋‹น ๊ฐ์ฒด์— ๋Œ€ํ•œ ์ž‘์—…์ˆ˜ํ–‰์ด ๊ฐ€๋Šฅํ•ด์ง.

notify( )ํ˜ธ์ถœ

  • ์ž‘์—…์„ ์ค‘๋‹จํ–ˆ๋˜ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋‹ค์‹œ ๋ฝ์„ ์–ป์–ด์„œ ์ž‘์—…์„ ์ง„ํ–‰ํ•จ.
  • wait( )์™€ notify( )๋Š” ํŠน์ • ๊ฐ์ฒด์— ๋Œ€ํ•œ๊ฒƒ์œผ๋กœ, Objectํด๋ž˜์Šค์— ์ •์˜๋˜์–ด ์žˆ์Œ.
  • ๋งค๊ฐœ๋ณ€์ˆ˜๊ฐ€ ์žˆ๋Š” wait( )์€ ์ง€์ •๋œ ์‹œ๊ฐ„๋™์•ˆ๋งŒ ๊ธฐ๋‹ค๋ฆผ = notify( )๊ฐ€ ์ž๋™์ ์œผ๋กœ ํ˜ธ์ถœ๋จ.
  • waiting pool์€ ๊ฐ์ฒด๋งˆ๋‹ค ์กด์žฌํ•จ.

(๋Œ€๊ธฐ์‹ค)

  • notifyAll( )์ด ํ˜ธ์ถœ๋œ๋‹ค๊ณ  ๋ชจ๋“  ๊ฐ์ฒด(X)์˜ waiting pool์— ์žˆ๋Š” ์“ฐ๋ ˆ๋“œ๊ฐ€ ๊นจ์›Œ์ง€๋Š” ๊ฒƒ์ด ์•„๋‹˜.
  • notifyAll( )ํ˜ธ์ถœ = ํ˜ธ์ถœํ•œ ๊ฐ์ฒด์˜ waitingPool์— ๋Œ€๊ธฐ์ค‘์ธ์“ฐ๋ ˆ๋“œ๋งŒ ํ•ด๋‹นํ•จ.
  • notify( )๋Š” ๋Œ€๊ธฐ์ค‘์ธ ์“ฐ๋ ˆ๋“œ๋ฅผ ๊นจ์šฐ๋Š”๋ฐ, ํŠน์ •์“ฐ๋ ˆ๋“œ๋ฅผ ์ง€์ •ํ•˜๋Š” ๊ฒƒ์ด ์•„๋‹Œ ์•„๋ฌด ์“ฐ๋ ˆ๋“œ๋‚˜ ๊นจ์šฐ๊ธฐ ๋•Œ๋ฌธ์— ๋น„ํšจ์œจ์ ์ž„.
  • ๊ธฐ์•„์ƒํƒœ:์šด์ด ๋‚˜์œ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์˜ค๋žซ๋™์•ˆ ํ†ต์ง€๋ฐ›์ง€ ๋ชปํ•˜๊ณ  ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฒƒ.
  • ๊ฒฝ์Ÿ์ƒํƒœ:์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ lock์„ ์–ป๊ธฐ ์œ„ํ•ด ์„œ๋กœ ๊ฒฝ์Ÿํ•˜๋Š” ๊ฒƒ.
  • ์“ฐ๋ ˆ๋“œ์˜ ์ข…๋ฅ˜๋ฅผ ๊ตฌ๋ถ„ํ•˜์ง€ ์•Š๊ณ  ๊ณต์œ ๊ฐ์ฒด์˜ waiting pool์— ๊ฐ™์ด ๋ชฐ์•„๋„ฃ์Œ
    • โ†ณ์„ ๋ณ„์ ์ธ ํ†ต์ง€๊ฐ€ ํ•„์š”ํ•ด์ง.

 

 

Lock๊ณผ Condition

  • ๊ฐ ์“ฐ๋ ˆ๋“œ๋ฅผ ์œ„ํ•œ Condition์„ ๋งŒ๋“ค์–ด์„œ ๊ฐ๊ฐ์˜ waiting pool์—์„œ ๋”ฐ๋กœ ๊ธฐ๋‹ค๋ฆฌ๋„๋ก ํ•จ.
  • ๋Œ€๊ธฐ์™€ ํ†ต์ง€์˜ ๋Œ€์ƒ์ด ๋ช…ํ™•ํžˆ ๊ตฌ๋ถ„๋จ.

await( )ํ˜ธ์ถœ

  • ๋ฉ”์„œ๋“œ๋Š” ํ˜„์žฌ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ผ์‹œ์ ์œผ๋กœ ์ค‘๋‹จํ•จ.

signal( )ํ˜ธ์ถœ

  • ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๋ฅผ ๊นจ์šฐ๋Š” ์—ญํ• ์„ ํ•จ.
  • Lock์ธํ„ฐํŽ˜์ด์Šค์˜ ๋‚ด๋ถ€์ธํ„ฐํŽ˜์ด์Šค๋กœ Condition ์ธํ„ฐํŽ˜์ด์Šค๊ฐ€ ์ •์˜๋˜์–ด์žˆ์Œ.
    • = Lock์ธํ„ฐํŽ˜์ด์Šค๋Š” new Condition( ) ๋ฉ”์„œ๋“œ๋ฅผ ๊ฐ–๊ณ  ์žˆ์–ด์„œ, ์ด ๋ฉ”์„œ๋“œํ˜ธ์ถœํ•˜๋ฉด Condition ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ๊ฐ์ฒด๊ฐ€ ๋ฐ˜ํ™˜๋จ.
  • Lock ์ธํ„ฐํŽ˜์ด์Šค์—๋Š” Condition ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ์œ„ํ•œ ๋ฉ”์„œ๋“œ๊ฐ€ ์ •์˜๋˜์–ด ์žˆ์œผ๋ฉฐ, ReentrantLock ํด๋ž˜์Šค๋Š” Lock ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•ฉ๋‹ˆ๋‹ค. ReentrantLock ํด๋ž˜์Šค ๋‚ด๋ถ€์—๋Š” Condition ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜๋Š” Condition ๊ฐ์ฒด๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์–ด์„œ, ReentrantLock ํด๋ž˜์Šค๋Š” Lock ์ธํ„ฐํŽ˜์ด์Šค์™€ Condition ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๋ชจ๋‘ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์Œ.

Lock์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•œ ํด๋ž˜์Šค๋“ค์€ ๋ชจ๋‘ Condition๊ฐ์ฒด๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ์Œ.

  • โ‘ ReentrantLock ํด๋ž˜์Šค
  • โ‘กReentrantReadWrtieLock ํด๋ž˜์Šค
  • โ‘ขStampedLock ํด๋ž˜์Šค

 


 

void lock( ), void unlock( )

  • ์ˆ˜๋™์œผ๋กœ lock์„ ์ž ๊ทธ๊ณ  ํ•ด์ œํ•ด์•ผ ํ•จ.
  • ํ•ด์ œ๋ฅผ ์žŠ์ง€ ์•Š์œผ๋ ค๊ณ  try-finally๋ฌธ์œผ๋กœ ๊ฐ์‹ธ๋Š” ๊ฒƒ์ด ์ผ๋ฐ˜์ ์ž„.

 

tryLock( )

  • ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ์— ์˜ํ•ด lock์ด ๊ฑธ๋ ค์žˆ์œผ๋ฉด lock์„ ์–ป์œผ๋ ค๊ณ  ๊ธฐ๋‹ค๋ฆฌ์ง€ ์•Š์Œ. ์ง€์ •๋œ ์‹œ๊ฐ„๋งŒํผ๋งŒ ๊ธฐ๋‹ค๋ฆผ. lock์„ ์–ป์œผ๋ฉด true๋ฐ˜ํ™˜, ๋ชป์–ป์œผ๋ฉด false๋ฐ˜ํ™˜.
  • InterruptedException์„ ๋ฐœ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ์Œ.
    • =์ง€์ •๋œ ์‹œ๊ฐ„๋™์•ˆ lock์„ ์–ป์œผ๋ ค๊ณ  ๊ธฐ๋‹ค๋ฆฌ๋‹ค๊ฐ€  interrupt( )์— ์˜ํ•ด ์ž‘์—…์ด ์ทจ์†Œ๋  ์ˆ˜ ์žˆ๊ฒŒ ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๋œป.

 

ReentrantLock๊ณผ Condition

  • โ‘  ์ด๋ฏธ ์ƒ์„ฑ๋œ lock์œผ๋กœ๋ถ€ํ„ฐ new Condition( ) ํ˜ธ์ถœํ•ด์„œ ์ปจ๋””์…˜ ์ƒ์„ฑํ•˜๊ธฐ
  • โ‘ก wait( ) & notify( ) ๋Œ€์‹ ์— Condition์˜ await( ) & signal( ) ์‚ฌ์šฉํ•˜๊ธฐ

 

ReentrantLock ํด๋ž˜์Šค

  • ๊ฐ€์žฅ ์ผ๋ฐ˜์ ์ธ lock
  • ํŠน์ • ์กฐ๊ฑด์—์„œ lock์„ ํ’€๊ณ , ๋‚˜์ค‘์— ๋‹ค์‹œ lock์„ ์–ป๊ณ , ์ž„๊ณ„์˜์—ญ์œผ๋กœ ๋“ค์–ด์™€์„œ ์ดํ›„์˜ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•จ.

 

ReentrantReadWrtieLock ํด๋ž˜์Šค

  • ์ฝ๊ธฐ๋ฅผ ์œ„ํ•œ lock, ์“ฐ๊ธฐ๋ฅผ ์œ„ํ•œ lock์„ ์ œ๊ณตํ•จ.
  • ์ž„๊ณ„์˜์—ญ์— ์ฝ๊ธฐ lock์ด ๊ฑธ๋ ค์žˆ์„ ๋•Œ, ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ฝ๊ธฐ lock์„ ์ค‘๋ณต ๊ฑธ๊ธฐ๊ฐ€ ๊ฐ€๋Šฅํ•จ. (์ฝ๊ธฐ๋Š” ๋‚ด์šฉ์„ ๋ณ€๊ฒฝํ•˜์ง€ ์•Š์œผ๋‹ˆ๊นŒ)
  • ์ฝ๊ธฐ lock์ผ ๋•Œ, ์“ฐ๊ธฐ lock X -์“ฐ๊ธฐ lock์ผ ๋•Œ, ์ฝ๊ธฐ lock X

 

StampedLock ํด๋ž˜์Šค

  • lock์„ ๊ฑธ๊ฑฐ๋‚˜ ํ•ด์ง€ํ•  ๋•Œ ์Šคํƒฌํ”„๋ฅผ ์‚ฌ์šฉํ•จ. (์Šคํƒฌํ”„ = longํƒ€์ž…์˜ ์ •์ˆ˜๊ฐ’)
  • ์ฝ๊ธฐ lock + ์“ฐ๊ธฐ lock + ๋‚™๊ด€์  ์ฝ๊ธฐ lock
  • ๋‚™๊ด€์  ์ฝ๊ธฐ lock: lock์ด ๊ฑธ๋ ธ๋Š”์ง€ ํ™•์ธํ•˜์ง€ ์•Š๊ณ  ์ผ๋‹จ ์ฝ๊ธฐ lock์„ ๊ฑด๋‹ค. (์„ ํ™•์ธ→ํ›„์‹œ๋„X) (์„ ์‹œ๋„→ํ›„ํ™•์ธO)
  • ์“ฐ๊ธฐ์™€ ์ฝ๊ธฐ๊ฐ€ ์ถฉ๋Œํ• ๋•Œ๋งŒ ์“ฐ๊ธฐ๊ฐ€ ๋๋‚œ ํ›„ ์ฝ๊ธฐ lock์„ ๊ฑด๋‹ค.

 

OptionalLock ํด๋ž˜์Šค

  • OptionalLock์€ ์ž๋ฐ”์˜ Lock ์ธํ„ฐํŽ˜์ด์Šค๋ฅผ ๊ตฌํ˜„ํ•˜์—ฌ ๋ฝ์„ ์‚ฌ์šฉํ•˜๋Š” ๊ธฐ๋Šฅ์„ ์ œ๊ณตํ•˜์ง€๋งŒ, ๋ฝ์ด ํ•„์š”ํ•˜์ง€ ์•Š์€ ์ƒํ™ฉ์—์„œ๋Š” ๋ฝ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š๋„๋ก ํ•˜๋Š” ๊ฒƒ์„ ๋ชฉ์ ์œผ๋กœ ๋งŒ๋“ค์–ด์ง„ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์ž…๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋ฉ”์„œ๋“œ ์‹คํ–‰ ๋„์ค‘์— ์‚ฌ์šฉ์ž์˜ ์ž…๋ ฅ์„ ๋ฐ›์•„์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ ๋“ฑ์—์„œ ๋ฝ์„ ์‚ฌ์šฉํ•˜์ง€ ์•Š์•„๋„ ๋˜๋Š” ์ƒํ™ฉ์ด ์žˆ์„ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ์ด๋•Œ OptionalLock์„ ์‚ฌ์šฉํ•˜๋ฉด ํ•„์š”ํ•œ ๊ฒฝ์šฐ์—๋งŒ ๋ฝ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ์–ด์„œ ๋ถˆํ•„์š”ํ•œ ๋ฝ ์‚ฌ์šฉ์„ ๋ฐฉ์ง€ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.
  • ๊ฐœ๋ณ„์ ์ธ ๋ฝ ๊ด€๋ จ ํด๋ž˜์Šค๊ฐ€ ์•„๋‹ˆ๋ผ, ์ผ๋ฐ˜์ ์œผ๋กœ ๋ฝ์„ ์‚ฌ์šฉํ•˜๋Š” ์ƒํ™ฉ์—์„œ ์„ ํƒ์ ์œผ๋กœ ๋ฝ์„ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋„๋ก ๋„์™€์ฃผ๋Š” ์œ ํ‹ธ๋ฆฌํ‹ฐ ํด๋ž˜์Šค์ž…๋‹ˆ๋‹ค.

 


 

volatile ์ œ์–ด์ž

  • ๋ณ€์ˆ˜ ์•ž์— volatile์„ ๋ถ™์ด๋ฉด ์ฝ”์–ด๊ฐ€ ๋ณ€์ˆ˜์˜ ๊ฐ’์„ ์ฝ์–ด์˜ฌ ๋•Œ, ์บ์‹œ๊ฐ€ ์•„๋‹Œ ๋ฉ”๋ชจ๋ฆฌ์—์„œ ์ฝ์–ด์˜ค๊ธฐ ๋•Œ๋ฌธ์— ์บ์‹œ/๋ฉ”๋ชจ๋ฆฌ ๋ถˆ์ผ์น˜๊ฐ€ ํ•ด๊ฒฐ๋จ.
  • ๋ณ€์ˆ˜์— synchronized๋ธ”๋Ÿญ์„ ์‚ฌ์šฉํ•ด๋„ ๊ฐ™์€ ํšจ๊ณผ 
  • long/double ํƒ€์ž…์˜ ๋ณ€์ˆ˜๋Š” 8byte(64๋น„ํŠธ)๋กœ ๋ณ€์ˆ˜๊ฐ’์„ ์ฝ๋Š” ๊ณผ์ •์—์„œ ๋‹ค๋ฅธ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋ผ์–ด๋“ค ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ๋ณ€์ˆ˜ ์„ ์–ธ ์‹œ volatile์„ ๋ถ™์—ฌ์„œ ์›์ž์ ์ธ ์—ฐ์‚ฐ์„ ๋ณด์žฅํ•จ. (๋™๊ธฐํ™”๋Š” X)

 

fork & join ํ”„๋ ˆ์ž„์›Œํฌ

  • ํฐ ์ž‘์—…์„ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ ํ•˜๊ธฐ ์œ„ํ•œ ๊ฒƒ.
  • ํ•˜๋‚˜์˜ ์ž‘์—…์„ ์ž‘์€ ๋‹จ์œ„๋กœ ๋‚˜๋ˆ ์„œ ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ๊ฐ€ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์„ ์‰ฝ๊ฒŒ ๋งŒ๋“ค์–ด์คŒ.
  • ์ˆ˜ํ–‰์— ๋”ฐ๋ผ ๋‘ ํด๋ž˜์Šค ์ค‘ ํ•˜๋‚˜๋ฅผ ์ƒ์†๋ฐ›์•„ ๊ตฌํ˜„ํ•จ.

  • ForkJoinFool : fork&join ํ”„๋ ˆ์ž„์›Œํฌ์—์„œ ์ œ๊ณตํ•˜๋Š” ์“ฐ๋ ˆ๋“œํ’€. ์ง€์ •๋œ ์ˆ˜์˜ ์“ฐ๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•ด์„œ ๋ฏธ๋ฆฌ ๋งŒ๋“ค์–ด๋†“๊ณ  ๋ฐ˜๋ณตํ•ด์„œ ์žฌ์‚ฌ์šฉ. ์“ฐ๋ ˆ๋“œํ’€์€ ์“ฐ๋ ˆ๋“œ๊ฐ€ ์ˆ˜ํ–‰ํ•ด์•ผํ•˜๋Š” ์ž‘์—…์ด ๋‹ด๊ธด ํ๋ฅผ ์ œ๊ณตํ•˜๊ณ , ๊ฐ ์“ฐ๋ ˆ๋“œ๋Š” ์ž์‹ ์˜ ์ž‘์—…ํ์— ๋‹ด๊ธด ์ž‘์—…์„ ์ˆœ์„œ๋Œ€๋กœ ์ฒ˜๋ฆฌํ•จ.

  • ๋น„๋™๊ธฐ ๋ฉ”์„œ๋“œ: ๋ฉ”์„œ๋“œ๋ฅผ ํ˜ธ์ถœํ•  ๋ฟ, ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ์ง€์•Š์Œ.

 

 

ํด๋ž˜์Šค๋“ค์˜ ๊ด€๊ณ„

  • ์ž‘์—…์„ ์–ด๋–ป๊ฒŒ ๋ถ„ํ• ํ•  ๊ฒƒ์ธ์ง€๋ฅผ ์ •์˜ํ•˜๊ณ , ์ž‘์€ ์ž‘์—…๋“ค์ด ์–ด๋–ค ๊ณ„์‚ฐ์„ ์ˆ˜ํ–‰ํ•˜๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์–ด๋–ป๊ฒŒ ํ•ฉ์น  ๊ฒƒ์ธ์ง€๋ฅผ ๊ฒฐ์ •ํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•จ.