Program Language/java

์ •ํ™•ํžˆ ๋ชจ๋ฅด๊ณ  ์“ฐ๋ฉด ์‚ฌ์ˆ˜ํ•œํ…Œ ๋“ฑ์ง ์Šค๋งค์‹œ ๋งž๋Š” Thread, ๋‹น์‹ ๋„ ๋ชจ๋ฅด๋Š” ์‚ฌ์ด ์“ฐ๊ณ  ์žˆ์—ˆ๋‹ค?

๊ฐœ๋ฐœํ•˜๋Š” ์ฃผ๋””์”จ 2023. 10. 17. 10:10

 

์ž๋ฐ”๋ฅผ ์ฒ˜์Œ ๊ณต๋ถ€ํ•˜๊ฒŒ ๋˜๋ฉด, ๋งˆ์ง€๋ง‰ ์ฆˆ์Œ์— ๋ฐฐ์šฐ๊ฒŒ ๋˜๋Š” Thread๋ผ๋Š” ๊ฐœ๋…์ด ์žˆ๋‹ค.

์ทจ์—…์„ ํ•˜๊ณ , ์‹ค๋ฌด์—์„œ spring, spring boot๋ฅผ ๋‹ค๋ฃจ๋ฉฐ ์ง์ ‘์ ์œผ๋กœ Thread๋ผ๋Š” ์ฝ”๋“œ ๋ณธ ๊ฒƒ์€ ์•ฝ,, 1-2๋ฒˆ? ์ด์—ˆ๋˜ ๊ฒƒ์ด์—ˆ๋‹ค.

 

 

๋ถ„๋ช… ์ž๋ฐ” ๋ฐฐ์šธ ๋•Œ ๋ฐฐ์› ๋˜ ๊ฐœ๋…์ธ๋ฐ
์‹ค๋ฌด์—์„œ๋Š” ๋ณ„๋กœ ์ค‘์š”ํ•˜์ง€ ์•Š์€๊ฒƒ์ธ๊ฐ€? ํ•˜๋Š”

-
์ด์ƒํ•œ ํ˜ธ๊ธฐ์‹ฌ์ด ์ƒ๊ฒผ๋‹ค.

 

 

 

Thread? ๊ทธ๊ฑฐ ์™œ ์”€?

์ž๋ฐ”์—์„œ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ผ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๊ธฐ ์œ„ํ•ด ์‚ฌ์šฉํ•œ๋‹ค.

 

์ €๋Š” ๋ฉ€ํ‹ฐ๊ฐ€ ์•ˆ๋˜๋Š” ์‚ฌ๋žŒ์ด๋ผ... ํ•œ ๋ฒˆ์— ํ•œ๊ฐ€์ง€ ์ผ ๋ฐ–์— ๋ชปํ•˜์ง€๋งŒ,...

์ปดํ“จํ„ฐ๋Š” ๋˜‘๋˜‘ํ•˜๋‹ˆ๊นŒ ํ•œ ๋ฒˆ์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ผ์„ ํ•˜๋ฉด ๋‹น์—ฐํžˆ ํšจ์œจ์ ์ด์ž–์•„์š”? โ— โ€ฟโ—  

 

 


๋“ค์–ด๊ฐ€๊ธฐ ์ „์—...

Thread๋ฅผ ์•Œ์•„๋ณด๊ธฐ ์ „์— ๊ผญ ์•Œ์•„์•ผ ๋” ์ž˜ Thread๋ฅผ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋Š” Process๋ฅผ ๋จผ์ € ์•Œ๊ณ  ๊ฐ‘์‹œ๋‹ค.แŸ.แŸ 

 

 

ํ”„๋กœ์„ธ์Šค

๋‹ค๋“ค ์ปดํ“จํ„ฐํ•˜๋ฉด์„œ ์ž‘์—…๊ด€๋ฆฌ์ž ์—ด์–ด์„œ ์™œ ๋Š๋ฆฐ์ง€ ํ™•์ธํ•œ ์  ์žˆ๋‚˜์š”?

 

ํ”„๋กœ์„ธ์Šค๋ž€ ๋ฐ”๋กœ ์ง€๊ธˆ ์ด ์ปดํ“จํ„ฐ CPU์— ์˜ฌ๋ผ๊ฐ€ ์žˆ๋Š”(= ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ๊ทธ๋žจ)์„ ๋งํ•ฉ๋‹ˆ๋‹ค.

 

์ปดํ“จํ„ฐ๋Š” ๊ฐ๊ฐ ์ž์‹ ๋งŒ์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ํฌํ•จํ•œ ๋…๋ฆฝ์ ์ธ ์‹คํ–‰ํ™˜๊ฒฝ์„ ๊ฐ€์ง€๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

 

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

Thread๋Š” JVM(๊ฐ€์ƒ๋จธ์‹ ์ธ๋ฐ ๋ชจ๋ฅด๋ฉด ์ด ์ •๋„๋Š” ์ฐพ์•„๋ณด๊ธฐเท†)์— ์˜ํ•ด ๊ด€๋ฆฌ๋œ๋‹ค.แŸ.แŸ 

 

Thread๋ž€

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ์ฝ”๋“œ๋ฅผ ํ•˜๋‚˜์”ฉ ์ˆœ์ฐจ์ ์œผ๋กœ ์‹คํ–‰ํ•˜๋Š” ๊ฒƒ
  • ์ž๋ฐ” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜ main()์„ ์‹คํ–‰ํ•˜๊ฒŒ ๋˜๋ฉด main()์ด ๋™์ž‘ํ•˜๋Š” ๊ฒƒ
  • Thread ์—†์ด๋Š” ์ž๋ฐ” ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์ด ๋™์ž‘ํ•  ์ˆ˜ ์—†์Œ
  • Thread๋Š” ํ•œ ๋ฒˆ์— ํ•˜๋‚˜์˜ ์ฝ”๋“œ๋ผ์ธ๋งŒ ์ˆ˜ํ–‰ํ•  ์ˆ˜ ์žˆ์Œ

 

์™ธ์›Œ์„œ ์ ์—ˆ๋˜ public static void main( )

 

์‹ค์Šต์„ ํ•˜๋ฉด์„œ ์ด์œ ๋„ ๋ชจ๋ฅด๊ณ  ๊ทธ๋ƒฅ ์™ธ์› ๋‹ค..
main( )์ด ๊ผญ ์žˆ์–ด์•ผ ํ•œ๋‹ค๋‹ˆ๊นŒ..๊ทธ๋ƒฅ ๊ทธ๋Ÿฐ ์ค„๋กœ๋งŒ ์ดํ•ดํ–ˆ๋‹ค...

 

 

 

์ž๋ฐ” ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์‹คํ–‰ํ•˜๋ฉด main() ์Šค๋ ˆ๋“œ๊ฐ€ ์ž๋™์œผ๋กœ ์‹œ์ž‘๋œ๋‹ค. ์™œโธŒโ—ฆฬˆโƒโธสทสฐสธห€ฬฃห€ฬฃห€ฬฃ ๊ทธ๋Ÿด๊นŒ..?

 

(Thread๋ฅผ ์ดํ•ดํ•˜๊ธฐ ์œ„ํ•ด ์‹ฌํ”Œํ•˜๊ฒŒ ์ƒ๊ฐํ•˜๋ฉด)
ํ”„๋กœ์„ธ์Šค์—๋Š” ์ ์–ด๋„ ํ•œ ๊ฐœ ์ด์ƒ์˜ Thread๊ฐ€ ์กด์žฌํ•ด์•ผ ํ•˜๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค.

 

 

์ž๋ฐ”๋Š” ์ผ๋‹จ, Main ์Šค๋ ˆ๋“œ ํ•˜๋‚˜๋กœ ์‹œ์ž‘ํ•˜์—ฌ ๊ฐœ๋ฐœ์ž๊ฐ€ ์Šค๋ ˆ๋“œ๋ฅผ ์ถ”๊ฐ€๋กœ ์ƒ์„ฑํ•˜๊ฒŒ ๋˜๋ฉด ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ํ™˜๊ฒฝ์ด ๋ฉ๋‹ˆ๋‹ค. 

 

 

์ด์ œ ํšจ์œจ์ ์œผ๋กœ ํ”„๋กœ์„ธ์Šค๋“ค์„ ์ฒ˜๋ฆฌํ•˜๊ฒ ๋‹ค ์ด๋ง์ž…๋‹ˆ๋‹ค~

 

๊ทธ๋Ÿผ, Thread๋ฅผ ๊ณ„์† ๋งŒ๋“ค์–ด์„œ ๋™์‹œ์— 1000, 100000๊ฐœ๊ฐ€ ๋Œ์•„๊ฐ€๊ฒŒ ํ•˜๋ฉด ๋‚˜๋Š” ๊ฝค ๊ธฐํŠนํ•œ ๊ฐœ๋ฐœ์ž๊ฒ ์ง€? ๐Ÿค”

 

 

๋ฐ”๋กœ ๋“ฑ์ง ์Šค๋งค์‹œ โ— โ€ฟโ—  ;;...

 

Thread ๋“ฑ์ง ์Šค๋งค์‹œ ์•ˆ ๋งž๋Š” ๋ฒ•

  • ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ๋ฆฌ์†Œ์Šค๋ฅผ ๊ณต์œ ํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํšจ์œจ์ ์ด์ง€๋งŒ, ์ž ์žฌ์ ์ธ ๋ฌธ์ œ์ ์— ๋…ธ์ถœ๋œ๋‹ค.
  • ์Šค๋ ˆ๋“œ์˜ ์ƒ์„ฑ๋น„์šฉ์€ ๋งค์šฐ๋งค์šฐ๋งค์šฐ ๋น„์‹ธ๋‹ค.. ๋น„์‹ธ๋‹ค Expensive..
  • ๊ณ ๊ฐ์˜ ์š”์ฒญ์ด ์˜ฌ ๋•Œ๋งˆ๋‹ค ์Šค๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋œ๋‹ค๋ฉด response ์‘๋‹ต ์†๋„๋Š” ์ €ํ•˜๋œ๋‹ค.
  • Context switching ๋น„์šฉ๋„ ๋ฐœ์ƒ๋œ๋‹ค.
  • ์ƒ์„ฑ์— ์ œํ•œ์ด ์—†๋‹ค(......)
  • ๊ณ ๊ฐ์˜ ์š”์ฒญ์ด ๋„ˆ๋ฌด ๋งŽ์œผ๋ฉด CPU๋‚˜ ๋ฉ”๋ชจ๋ฆฌ ์ž„๊ณ„์ ์„ ๋„˜๊ฒจ ์„œ๋ฒ„๊ฐ€ ์ฃฝ์„ ์ˆ˜ ์žˆ๋‹ค๐Ÿ˜‡

 

์ด ๋‚ด์šฉ๋“ค์„ ๋ฐ˜๋“œ์‹œ ์•Œ๊ณ  Thread๋ฅผ ์จ์•ผ ๋“ฑ์ง ์Šค๋งค์‹œ๋ฅผ ํ”ผํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฐ‘์ž๊ธฐ ์ด๊ฑฐ๋ณด๊ณ  ์Šค๋ ˆ๋“œ ์•ˆ ์“ด๋‹ค๋Š” ์‚ฌ๋žŒ ์žˆ์„๊นŒ๋ด ์žฅ์ ๋„ ์†Œ๊ฐœํ•˜๊ฒ ๋‹ค.

 

๊ทธ๋Ÿผ์—๋„ ๋ถˆ๊ตฌํ•˜๊ณ  Thread๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์ด์œ 

  • ๋™์‹œ ์š”์ฒญ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค.
    ๋งŽ์€ ์‚ฌ์šฉ์ž๋“ค์ด ๊ฐ™์€ ์š”์ฒญํ–ˆ๋Š”๋ฐ ํ•œ ๋ฒˆ์— ํ•œ๊ฐœ๋งŒ ์ฒ˜๋ฆฌํ•˜๋ฉด ๋‚˜๋จธ์ง€๋Š” ๊ณ„~~์† ๋Œ€๊ธฐํ•ด์•ผํ•œ๋‹ค. ์„ฑ์งˆ๊ธ‰ํ•œ ํ•œ๊ตญ์‚ฌ๋žŒ์€ ์ ˆ๋Œ€ ๋ชป๊ธฐ๋‹ค๋ฆฐ๋‹ค.
  • ๋ฆฌ์†Œ์Šค๊ฐ€ ํ—ˆ์šฉํ•˜๋Š” ํ•œ ์ฒ˜๋ฆฌ๊ฐ€ ๊ฐ€๋Šฅํ•˜๋‹ค.
    ์šฐ๋ฆฌ์—๊ฒ CPU์™€ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ ์žˆ๋‹ค. ์ด ์—„์ฒญ๋‚œ ์นœ๊ตฌ๋“ค์ด ํ—ˆ์šฉํ•˜๋Š” ๋ฒ”์œ„์—์„œ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋‹ค๋Š” ๊ฑด ๊ต‰์žฅํ•œ ๊ฒƒ์ด๋‹ค.
  • ํ•˜๋‚˜๊ฐ€ ์ง€์—ฐ๋˜์–ด๋„ ์‹ ์—๊ฒŒ๋Š” ์•„์ง 2๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋‚จ์•„์žˆ์Šต๋‹ˆ๋‹ค๐Ÿ˜Ž
    ์ž‘์—… ์ค‘ ํ•˜๋‚˜์˜ Thread๊ฐ€ ์ง€์—ฐ๋œ๋‹ค๋ฉด ๋‚˜๋จธ์ง€๋Š” ์ •์ƒ ๋™์ž‘ํ•œ๋‹ค. ๋”ฐ๋ผ์„œ ์˜ํ–ฅ์„ ์•ˆ๋ฐ›์œผ๋‹ˆ๊นŒ ๋‚ด ํ• ์ผ์„ ์ž˜ ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Thread Pool๊ณผ ํ•จ๊ป˜๋ผ๋ฉด ์˜คํžˆ๋ ค ์ข‹์•„.
    ๋‚ด๋ถ€์— Thread Pool์„ ๋‘์–ด ๋ณด๊ด€ํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋ฉฐ, ๋ฌด์—‡๋ณด๋‹ค ์ด ์ƒ์„ฑ ๊ฐœ์ˆ˜๋ฅผ ์ œํ•œํ•  ์ˆ˜ ์žˆ๋‹ค. ๋˜ํ•œ ๋Œ€๊ธฐ, ๊ฑฐ์ ˆ์„ ํ†ตํ•ด WAS์˜ ๋ถ€ํ•˜๋ฅผ ์ค„์ผ ์ˆ˜ ์žˆ๋‹ค.

 

์‹ค๋ฌด์—์„œ Thread Pool

WAS์˜ ์ฃผ์š” ํŠœ๋‹ ํฌ์ธํŠธ, ์ตœ๋Œ€ ์Šค๋ ˆ๋“œ ์ˆ˜

๊ฐ’์„ ๋‚ฎ๊ฒŒ ์„ค์ •ํ–ˆ์„๋•Œ, ๋™์‹œ ์š”์ฒญ์ด ๋งŽ์•„์ง„๋‹ค๋ฉด?

์„œ๋ฒ„ ๋ฆฌ์†Œ์Šค๋Š” ์—ฌ์œ ๋กญ์ง€๋งŒ ํด๋ผ์ด์–ธํŠธ ์‘๋‹ต์— ์ง€์—ฐ์ด ๋ฐœ์ƒ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

๊ฐ’์„ ๋†’๊ฒŒ ์„ค์ •ํ–ˆ์„ ๋•Œ, ๋™์‹œ ์š”์ฒญ์ด ๋งŽ์•„์ง„๋‹ค๋ฉด?

CPU, ๋ฉ”๋ชจ๋ฆฌ ๋ฆฌ์†Œ์Šค ์ž„๊ณ„์  ์ดˆ๊ณผ๋กœ ์„œ๋ฒ„๊ฐ€ ๋‹ค์šด๋œ๋‹ค.

 

Thread์˜ ์ ๋‹นํ•œ ๊ฐœ์ˆ˜๋Š” ๋ช‡ ๊ฐ ๊ฐ€์š”?

  • ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜ ๋กœ์ง์˜ ๋ณต์žก๋„, CPU, ๋ฉ”๋ชจ๋ฆฌ ๋ฆฌ์†Œ์Šค ์ƒํ™ฉ ๋“ฑ ์—ฌ๋Ÿฌ๊ฐ€์ง€๋ฅผ ๊ณ ๋ คํ•ด์•ผ ํ•œ๋‹ค.
  • ์„ฑ๋Šฅ ํ…Œ์ŠคํŠธ๋ฅผ ํ†ตํ•ด ํ™•์ธํ•ด๋ณด์„ธ์š”.
  • ์ตœ๋Œ€ํ•œ ์‹ค์ œ ์„œ๋น„์Šค์ฒ˜๋Ÿผ ์œ ์‚ฌํ•˜๊ฒŒ ๊ณ ๊ฐ์˜ ์š”์ฒญ๋„ ๋งŽ์ด๋ณด๋‚ด๊ณ ํ•ด์„œ ํ…Œ์ŠคํŠธ ํ•ด๋ณด์„ธ์š”.
  • ์•„ํŒŒ์น˜ DB, ์ œ์ด๋ฏธํ„ฐ, nGrinder ์‚ฌ์šฉํ•˜์‹œ๋ฉด ๋ฉ๋‹ˆ๋‹ค.

 

 

๋.