๐Ÿ–ฅ๏ธ Computer Science/OS

[OS] ์Šค๋ ˆ๋“œ(Thread)

Rosieblue 2023. 5. 10. 17:36
728x90

์Šค๋ ˆ๋“œ(Thread)๋ž€? 

์Šค๋ ˆ๋“œ(Thread)๋Š” ํ”„๋กœ์„ธ์Šค(Process) ์•ˆ์—์„œ ์‹ค์ œ๋กœ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ์žˆ๋Š” ํ•˜๋‚˜์˜ ์ฃผ์ฒด์ด๋‹ค.

ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰๋˜๊ณ  ์žˆ๋Š” ํ”„๋กœ๊ทธ๋žจ (์ฐธ๊ณ  : [๐Ÿ–ฅ๏ธ Computer Science/OS] - [OS] ํ”„๋กœ์„ธ์Šค vs ํ”„๋กœ๊ทธ๋žจ)์ด๋ผ๋ฉด, ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค ์•ˆ์—์„œ ์ง„ํ–‰๋˜๋Š” ์‹คํ–‰์˜ ํ๋ฆ„์ด๋‹ค. ์Šค๋ ˆ๋“œ๋Š” ์˜ค์ง ํ•œ ํ”„๋กœ์„ธ์Šค ์•ˆ์—๋งŒ ์†ํ•ด์žˆ๋‹ค.

 

์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค์˜ ํŠน์ง•์„ ์ง€๋‹ˆ๊ธฐ ๋•Œ๋ฌธ์— ๊ฒฝ๋Ÿ‰ ํ”„๋กœ์„ธ์Šค(lightweight process)๋ผ๋Š” ์ด๋ฆ„์„ ๊ฐ€์ง€๊ณ  ์žˆ๊ธฐ๋„ ํ•˜๋‹ค.

๊ทธ๋ ‡๋‹ค๋ฉด ํ”„๋กœ์„ธ์Šค๋งŒ ์‚ฌ์šฉํ•˜๋ฉด ๋˜์ง€ ์Šค๋ ˆ๋“œ๊นŒ์ง€ ๊ท€์ฐฎ๊ฒŒ ๋˜ ๋งŒ๋“ค์–ด์„œ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ผ๊นŒ?

 

์˜ˆ์‹œ๋ฅผ ๋“ค์–ด๋ณด๋ฉด ๋‹ค์Œ๊ณผ ๊ฐ™๋‹ค. (์ด ์˜ˆ์‹œ๋Š” ์ธํŒŒ๋‹˜ ๋ธ”๋กœ๊ทธ์˜ ์„ค๋ช…์„ ์ฐธ๊ณ ํ•˜์˜€์Œ์„ ๋ฐํžŒ๋‹ค.)

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

 

์ง€๋ ์ด ๊ฐ™์ด ์ƒ๊ธด ์•„์ด๊ฐ€ thread์ด๋‹ค! ์Šค๋ ˆ๋“œ๋Š” 'ํ๋ฆ„'์„ ๋งํ•˜๊ธฐ ๋•Œ๋ฌธ์— ์ง€๋ ์ด์ฒ˜๋Ÿผ ํ‘œํ˜„ํ•œ ๊ฒƒ์ด๋‹ค.

ํ•œํŽธ ์ง€๋ ์ด๊ฐ€ ๋Š๊ฒจ ์žˆ๋Š” ๋ชจ์Šต๋„ ๋ณด์ด๋Š”๋ฐ ์ด์ฒ˜๋Ÿผ ์Šค๋ ˆ๋“œ๋Š” context-switching์„ ํ†ตํ•ด ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ์‹คํ–‰๋˜๋Š” ๋ชจ์Šต์„ ๋‚˜ํƒ€๋‚ธ ๊ฒƒ์ด๋‹ค. 

 

ํ•œํŽธ, ํ•œ ํ”„๋กœ์„ธ์Šค์—์„œ๋Š” ์ตœ์†Œํ•œ ๋ฌด์–ธ๊ฐ€๋ผ๋„ ์‹คํ–‰๋˜์–ด์•ผ ํ•  ๊ฒƒ์ด๋ฏ€๋กœ ์ตœ์†Œ ํ•œ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋Š” ์กด์žฌํ•œ๋‹ค. ๊ทธ๋ฆฌ๊ณ  ์Šค๋ ˆ๋“œ๊ฐ€ ์—ฌ๋Ÿฌ๊ฐœ์ธ ํ”„๋กœ์„ธ์Šค๋ฅผ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ์„ธ์Šค๋ผ๊ณ ํ•œ๋‹ค.

 

 

์œ„ ๊ทธ๋ฆผ์„ ๋ณด๋ฉด ํ•œ ํ”„๋กœ์„ธ์Šค์˜ ์Šค๋ ˆ๋“œ๋“ค์ด ์–ด๋–ป๊ฒŒ ์ž์›์„ ์‚ฌ์šฉํ•˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค. ์Šค๋ ˆ๋“œ 1,2,3์€ CPU๊ด€๋ จ, ์ฆ‰ ์‹คํ–‰ ๊ด€๋ จํ•œ ์ •๋ณด๋“ค ๊ธฐ์ค€์œผ๋กœ ๋‚˜๋ˆ„๊ณ (๋ฌด์—‡์„ ์‹คํ–‰ํ•˜๋Š”์ง€์— ๋”ฐ๋ผ ๋‚˜๋ˆ„๊ณ ) ๋‚˜๋จธ์ง€ ์ž์›์€ ๋‹ค ๊ณต์œ ํ•œ๋‹ค. ์ด์ฒ˜๋Ÿผ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋”ฉ ๊ธฐ๋ฒ•์„ ์ด์šฉํ•˜๋ฉด ํ”„๋กœ์„ธ์Šค๋“ค๋ผ๋ฆฌ ์ž์›์„ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ๋ณด๋‹ค ํ›จ์”ฌ ์ž์›์„ ์‰ฝ๊ฒŒ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ๋‹ค.

 

์—ฌ๊ธฐ์„œ ๋˜ ์Šค๋ ˆ๋“œ์˜ ์ •์˜๋ฅผ ๋‹ค๋ฅด๊ฒŒ ํ‘œํ˜„ํ•ด๋ณด๋ฉด "CPU utilization์˜ ๊ธฐ๋ณธ ๋‹จ์œ„" ๋ผ๊ณ  ํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค. 

๋˜ํ•œ ์Šค๋ ˆ๋“œ๋Š” ์‹คํ–‰ ํ๋ฆ„์ด๊ธฐ ๋•Œ๋ฌธ์— ๊ฐ๊ฐ์˜ ์Šค๋ ˆ๋“œ๋งˆ๋‹ค ๋ ˆ์ง€์Šคํ„ฐ ์ •๋ณด๋‚˜ PC ๋“ฑ์ด ๋‹ค ๋‹ค๋ฅผ ๊ฒƒ๋„ ์ž์—ฐ์Šค๋Ÿฝ๊ฒŒ ์ถ”์ธกํ•  ์ˆ˜ ์žˆ๊ฒ ๋‹ค.

 

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ vs ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋Š” ํ•œ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ์ˆ˜ํ–‰ํ•˜๋Š” ๊ฒƒ์„ ์˜๋ฏธํ•œ๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ์™œ ๊ตณ์ด ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๋ฅผ ์‚ฌ์šฉํ•˜์ง€ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๊นŒ์ง€ ์“ธ๊นŒ?

  • ์ผ๋‹จ ํ”„๋กœ์„ธ์Šค๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋๋‚ด๋Š” ๊ฒƒ๋ณด๋‹ค ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋๋‚ด๋Š” ๊ฒƒ์ด overhead๊ฐ€ ์ ๋‹ค
  • ๋ฉ”๋ชจ๋ฆฌ ๊ณต์œ ๊ฐ€ ์‰ฝ๊ณ  ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๊ฐ€ ์ ๋‹ค. 
    • ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค์˜ ๊ฒฝ์šฐ shared-memory๋ฅผ ์ด์šฉํ•˜๊ฑฐ๋‚˜ message-passing๊ธฐ๋ฒ•์„ ์ด์šฉํ•˜๋Š”๋ฐ ์ด๊ฑด ๊ฝค๋‚˜ ๋ถˆํŽธํ•  ์ˆ˜ ์žˆ๋‹ค.
    • ํ•˜์ง€๋งŒ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ์ธ ๊ฒฝ์šฐ ํ”„๋กœ์„ธ์Šค ์•ˆ์˜ ์ž์›์€ ๊ณต์œ ํ•˜๊ณ  ์Šคํƒ์„ ๋”ฐ๋กœ ๋งŒ๋“ค์–ด ์ž์‹ ์˜ ์ž์›์„ ๋”ฐ๋กœ ์ €์žฅํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ๊ณต์œ ๊ฐ€ ์‰ฝ๋‹ค. 
    • ์ฆ‰ ํ”„๋กœ์„ธ์Šค๋Š” ์„œ๋กœ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•˜์ง€ ์•Š์ง€๋งŒ ์Šค๋ ˆ๋“œ๋Š” ์„œ๋กœ ๋งค์šฐ ์‰ฝ๊ฒŒ ๊ณต์œ ํ•œ๋‹ค.
    • ๋˜ํ•œ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค์˜ ๊ฒฝ์šฐ ํ”„๋กœ์„ธ์Šค ๋ณ„๋กœ ๊ฐ๊ฐ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ํ• ๋‹นํ•˜์ง€๋งŒ ์Šค๋ ˆ๋“œ๋Š” ํ•œ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ํ• ๋‹นํ•˜๋ฏ€๋กœ ๋ฉ”๋ชจ๋ฆฌ ๋‚ญ๋น„๋„ ์ ๋‹ค.
  • ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋  ๋•Œ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋„ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์–ด ์‚ฌ์šฉ์ž ์ž…์žฅ์—์„œ ํŽธ๋ฆฌํ•˜๋‹ค.

๊ทธ๋ฆผ ์ถœ์ฒ˜ : https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4-%E2%9A%94%EF%B8%8F-%EC%93%B0%EB%A0%88%EB%93%9C-%EC%B0%A8%EC%9D%B4

 

๋ฉ”์ธ ์Šค๋ ˆ๋“œ & ์„œ๋ธŒ ์Šค๋ ˆ๋“œ

  • main thread๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์‹คํ–‰์„ ์‹œ์ž‘ํ•˜๋Š” ์ฃผ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ๊ฐœ๋…์ด๋‹ค.

๋Œ€๋ถ€๋ถ„์˜ ์šด์˜ ์ฒด์ œ์—์„œ๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹œ์ž‘๋  ๋•Œ main ์Šค๋ ˆ๋“œ๊ฐ€ ์ƒ์„ฑ๋˜๊ณ , ๋ณดํ†ต main ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ๊ทธ๋žจ์˜ ์ง„์ž…์ ์ธ main() ํ•จ์ˆ˜๋ฅผ ์‹คํ–‰ํ•œ๋‹ค.

main ์Šค๋ ˆ๋“œ๋Š” ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๊ด€๋ฆฌํ•˜๋Š” ์—ญํ• ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ์˜ˆ๋ฅผ๋“ค์–ด ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋žจ์—์„œ main thread๋Š” ์ดˆ๊ธฐํ™” ์ž‘์—…, ์ž์›ํ• ๋‹น, ์Šค๋ ˆ๋“œ ์ƒ์„ฑ ๋“ฑ์„ ์ˆ˜ํ–‰ํ•œ๋‹ค. ๋˜ํ•œ main thread๊ฐ€ ์ข…๋ฃŒ๋˜๋ฉด ํ”„๋กœ๊ทธ๋žจ ์ „์ฒด๊ฐ€ ์ข…๋ฃŒ๋  ์ˆ˜ ์žˆ๋‹ค.

 

  • Sub thread๋Š” ์ฃผ๋กœ main thread ์ด์™ธ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€๋ฆฌํ‚ค๋Š” ์šฉ์–ด์ด๋‹ค. ์ผ๋ฐ˜์ ์œผ๋กœ main thread ์ด์™ธ์˜ ์Šค๋ ˆ๋“œ๋ฅผ sub thread๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.

 

 

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ์˜ˆ์‹œ

(์ฐธ๊ณ  : https://modoocode.com/269)

๋ณ‘๋ ฌ ๊ฐ€๋Šฅํ•œ(Parallizable) ์ž‘์—…๋“ค

  • 1~10000๊นŒ์ง€ ๋”ํ•˜๋Š” ์ž‘์—…

์‹ฑ๊ธ€์Šค๋ ˆ๋“œ๋กœ ํ•˜๋ฉด 1~10000๊นŒ์ง€ ํ•œ ์Šค๋ ˆ๋“œ๊ฐ€ ๋‹ค ํ•˜๊ฒŒ ๋œ๋‹ค.

ํ•˜์ง€๋งŒ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋กœ 1~1000, 1001~2000, ....,90001~10000 ์ด๋Ÿฐ์‹์œผ๋กœ ๋‚˜๋ˆ ์„œ ์ฒ˜๋ฆฌํ•œ๋‹ค๋ฉด?

CPU ์ฝ”์–ด์—์„œ ๋ง์…ˆ ํ•œ๋ฒˆ์— 1์ดˆ๊ฐ€ ๊ฑธ๋ฆฐ๋‹ค๊ณ  ๊ฐ€์ •ํ•ด๋ณด์ž. ์ด๋•Œ ๋‹จ์ผ ์“ฐ๋ ˆ๋“œ๋กœ ๊ณ„์‚ฐํ•˜๋ฉด ์ด 10000์ดˆ๊ฐ€ ๊ฑธ๋ฆด ๊ฒƒ์ด๋‹ค.

ํ•˜์ง€๋งŒ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ๋กœ ๊ณ„์‚ฐํ•œ๋‹ค๋ฉด 1000์ดˆ + ํ•ฉ์น˜๋Š” ์‹œ๊ฐ„ 10์ดˆ ํ•ด์„œ ๋Œ€๋žต 1010์ดˆ๋งŒ ๊ฑธ๋ฆฌ๊ฒŒ ๋œ๋‹ค.

์ด์ฒ˜๋Ÿผ ์‹œ๊ฐ„์„ ์—„์ฒญ๋‚˜๊ฒŒ ๋‹จ์ถ•ํ•  ์ˆ˜ ์žˆ๋‹ค!!

 

์ฐธ๊ณ ) ์ด๊ฒƒ์„ ๋ณ‘๋ ฌํ™”(Parallize)๋ผ๊ณ  ํ•˜๋Š”๋ฐ, ์ด๊ฒƒ์ด ๊ฐ€๋Šฅํ•œ ์ด์œ ๋Š” ๊ฐ ์Šค๋ ˆ๋“œ๋“ค๋ผ๋ฆฌ ํ•˜๋Š” ์ž‘์—…์ด ๊ฑฐ์˜ ๋…๋ฆฝ์ ์ด๊ธฐ ๋•Œ๋ฌธ์ด๋‹ค. ๋งŒ์•ฝ์— ์„œ๋กœ ๋…๋ฆฝ์ ์ด์ง€ ์•Š๊ณ  ์˜์กด์ ์ด๋ผ๋ฉด(dependant), ๋ณ‘๋ ฌํ™”๊ฐ€ ์–ด๋ ค์šธ ๊ฒƒ์ด๋‹ค.(ex: ํ”ผ๋ณด๋‚˜์น˜ ์ˆ˜์—ด ๊ณ„์‚ฐ)

 

๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ๊ธด ์ž‘์—…๋“ค

์•„๋ž˜์™€ ๊ฐ™์ด ์›น์‚ฌ์ดํŠธ๋ฅผ ๊ธ์–ด์˜ค๋Š” ์–ด๋–ค ํ”„๋กœ๊ทธ๋žจ์ด ์žˆ๋‹ค๊ณ  ํ•˜์ž.

int main() {
  // ๋‹ค์šด ๋ฐ›์œผ๋ ค๋Š” ์›น์‚ฌ์ดํŠธ์™€ ๋‚ด์šฉ์„ ์ €์žฅํ•˜๋Š” ๋งต
  map<string, string> url_and_content;
  for (auto itr = url_and_content.begin(); itr != url_and_content.end();
       ++itr) {
    const string& url = itr->first;

    // download ํ•จ์ˆ˜๋Š” ์ธ์ž๋กœ ์ „๋‹ฌ๋ฐ›์€ url ์— ์žˆ๋Š” ์‚ฌ์ดํŠธ๋ฅผ ๋‹ค์šด๋ฐ›์•„ ๋ฆฌํ„ดํ•œ๋‹ค.
    itr->second = download(url);
  }
}

 

์œ„ ํ”„๋กœ๊ทธ๋žจ์€ url๋ฅผ ์ธ์ž๋กœ ๋ณด๋‚ด์„œ downloadํ•จ์ˆ˜๋ฅผ ํ†ตํ•ด์„œ ์‚ฌ์ดํŠธ๋ฅผ ๋‹ค์šด๋ฐ›๋Š”๋‹ค. 

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

์“ฐ๋ ˆ๋“œ 1 ๊ฐœ ๋งŒ์„ ์‚ฌ์šฉํ•  ๋•Œ

 

ํ•˜์ง€๋งŒ ๋งŒ์ผ download ํ•จ์ˆ˜๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ๊ฒƒ์„ ์—ฌ๋Ÿฌ ์“ฐ๋ ˆ๋“œ์—์„œ ๋ถ€๋ฅด๋ฉด ์–ด๋–ป๊ฒŒ ๋ ๊นŒ?

์“ฐ๋ ˆ๋“œ ์—ฌ๋Ÿฌ๊ฐœ๋ฅผ ์‚ฌ์šฉํ•  ๋•Œ

 

์œ„ ๊ทธ๋ฆผ์€ ๊ฐ™์€ ์ฝ”์–ด ์•ˆ์—์„œ ์“ฐ๋ ˆ๋“œ๋“ค์ด ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์„ ํ†ตํ•ด ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„ ์—†์ด CPU ๋ฅผ ์ตœ๋Œ€ํ•œ์œผ๋กœ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ดˆ๋ก์ƒ‰ ์“ฐ๋ ˆ๋“œ์—์„œ ์›น์‚ฌ์ดํŠธ 1 ์— ์š”์ฒญ์„ ๋ณด๋‚ธ ํ›„, ์ด์ „์—๋Š” ์›น์‚ฌ์ดํŠธ 1 ์—์„œ ๋ฐ์ดํ„ฐ๋ฅผ ๋‹ค์šด๋กœ๋“œ๋ฅผ ์‹œ์ž‘ํ•˜๊ธฐ ๊นŒ์ง€ ๊ธฐ๋‹ค๋ ค์•ผ ํ–ˆ์ง€๋งŒ, ์ด ๊ฒฝ์šฐ ์ฃผํ™ฉ์ƒ‰ ์“ฐ๋ ˆ๋“œ๋กœ ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ ๋˜์–ด์„œ, ๊ธฐ๋‹ค๋ฆฌ๋Š” ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜์ง€ ์•Š๊ณ  ๋น„๋™๊ธฐ์ ์œผ๋กœ ๋ฐ”๋กœ ์›น์‚ฌ์ดํŠธ 2 ์— ์š”์ฒญ์„ ๋ณด๋‚ด๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์œ„์™€ ๊ฐ™์ด ์ฒ˜๋ฆฌํ•˜๊ฒŒ ๋œ๋‹ค๋ฉด CPU ์‹œ๊ฐ„์„ ๋‚ญ๋น„ํ•˜์ง€ ์•Š๊ณ  ํšจ์œจ์ ์œผ๋กœ ์ž‘์—…์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๊ฒŒ ๋œ๋‹ค.

 

 

 

๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋ฅผ ์ด์šฉํ•˜๋ฉด ์—ฌ๋Ÿฌ ํšจ๊ณผ๋ฅผ ์–ป์„ ์ˆ˜์žˆ๊ณ  ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ๋ฅผ ๋™์‹œ์— ์‹คํ–‰ํ•  ์ˆ˜ ์žˆ์œผ๋ฏ€๋กœ ์†๋„๋„ ๋นจ๋ผ์ง„๋‹ค. ๊ทธ๋ ‡๋‹ค๋ฉด ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ฌด์กฐ๊ฑด ์ข‹์€ ๊ฒƒ์ผ๊นŒ? 

 

์Šค๋ ˆ๋“œ๊ฐ€ ๋ฒˆ๊ฐˆ์•„๊ฐ€๋ฉด์„œ ์‹คํ–‰๋ ๋•Œ๋Š” (์˜ˆ๋ฅผ๋“ค์–ด ์ฝ”์–ด์˜ ์ˆ˜๋ณด๋‹ค ์Šค๋ ˆ๋“œ ์ˆ˜๊ฐ€ ๋งŽ์€ ๊ฒฝ์šฐ) context-switching(๋ฌธ๋งฅ๊ตํ™˜)์ด ์ผ์–ด๋‚œ๋‹ค.

 

context switching(๋ฌธ๋งฅ ๊ตํ™˜)

context switching์ด๋ž€, ํ˜„์žฌ๊นŒ์ง€์˜ ์ž‘์—… ์ƒํƒœ๋‚˜ ๋‹ค์Œ ์ž‘์—…์— ํ•„์š”ํ•œ ๊ฐ์ข… ๋ฐ์ดํ„ฐ๋ฅผ ์ €์žฅํ•˜๊ณ  ์ฝ์–ด์˜ค๋Š” ์ž‘์—…์„ ๊ฐ€๋ฆฌํ‚จ๋‹ค. ์ด๋ฅผ ํ†ตํ•ด ์Šค๋ ˆ๋“œ๊ฐ€ ๊ต์ฒด๋œ๋‹ค. ์œ„์— ์ง€๋ ์ด ๊ทธ๋ฆผ์—์„œ threadA ๊ฐ€ ๋Š๊ธฐ๊ณ  thread B๊ฐ€ ์‹คํ–‰๋˜๊ณ  ๋‹ค์‹œ thread A๊ฐ€ ์‹คํ–‰๋  ๋•Œ context switching์ด ์ผ์–ด๋‚˜๋Š” ๊ฒƒ์„ ๋ณผ ์ˆ˜ ์žˆ๋‹ค. ์ด๋Š” ์Šค๋ ˆ๋“œ ๊ฐ„๋งŒ์ด ์•„๋‹ˆ๋ผ ํ”„๋กœ์„ธ์Šค ์‚ฌ์ด์—์„œ๋„ ์ผ์–ด๋‚œ๋‹ค.

 

์ €์žฅํ•˜๊ณ  ๋‹ค์‹œ ๋ถˆ๋Ÿฌ์˜ค๊ณ .. ์ด๋Ÿฐ ๊ณผ์ •์ด ์žˆ๊ธฐ ๋•Œ๋ฌธ์— context switching ์—๋Š” ๋ถ„๋ช… overhead๊ฐ€ ์กด์žฌํ•  ๊ฒƒ์ด๋‹ค. ๋”ฐ๋ผ์„œ ์Šค๋ ˆ๋“œ๊ฐ€ ๋„ˆ๋ฌด ๋งŽ์•„์ง€๋ฉด context switching์˜ overhead๋˜ํ•œ ๋งŽ์•„์ง€๊ฒŒ ๋˜์–ด์„œ ํšจ์œจ์ด ๋” ๋‚˜๋น ์งˆ ์ˆ˜๋„ ์žˆ๋‹ค.

 

๋”ฐ๋ผ์„œ ์ ๋‹นํžˆ ์Šค๋ ˆ๋“œ์˜ ๊ฐœ์ˆ˜๋ฅผ ์กฐ์ ˆํ•˜๋Š” ๊ฒƒ์ด ์ค‘์š”ํ•˜๋‹ค.

 

๊ฐ์ข… ์šฉ์–ด

  • ์Šค๋ ˆ๋“œ ๊ทธ๋ฃน : ๋น„์Šทํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ์Šค๋ ˆ๋“œ๋“ค์„ ๋ฌถ์–ด๋†“์„ ์ˆ˜ ์žˆ๋‹ค. ์ด๋ฅผ ์Šค๋ ˆ๋“œ ๊ทธ๋ฃน์ด๋ผ๊ณ  ํ•œ๋‹ค. ๊ทธ๋ฃน์€ ๋‹ค๋ฅธ ๊ทธ๋ฃน์— ์†ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • TLS(Thread Local Storage) : ์šฐ๋ฆฌ๋Š” ์œ„์—์„œ ์Šค๋ ˆ๋“œ๋Š” ์Šคํƒ์— ์ž์‹ ๋“ค๋งŒ์˜ ์ •๋ณด๋ฅผ ์ €์žฅํ•œ๋‹ค๊ณ  ํ–ˆ๋‹ค. ๊ทธ๋Ÿฐ๋ฐ ์Šคํƒ์— ๋“ค์–ด์žˆ๋Š” ์• ๋“ค์€ local variable์ด๋ฏ€๋กœ ์ „์—ญ ๋ณ€์ˆ˜๋“ฑ์„ ์ €์žฅํ•  ์ˆ˜ ์—†๋‹ค. ์ด๋Ÿด ๊ฒฝ์šฐ TLS๋ผ๋Š” ์ €์žฅ๊ณต๊ฐ„์„ ๋งŒ๋“ค์–ด ์ „์ฒด์—์„œ ๋ชจ๋‘ visibleํ•œ ๋ณ€์ˆ˜๋“ค(static ํ˜น์€ globalํ•œ)์„ ์ €์žฅํ•  ์ˆ˜ ์žˆ๋‹ค. (์ฐธ๊ณ  : [๐Ÿ–ฅ๏ธ Computer Science/OS] - [OS] Thread Local Storage (TLS))

 

๋‹ค์Œ ํฌ์ŠคํŠธ์—์„œ๋Š” ์Šค๋ ˆ๋“œ๋“ค์ด ์–ด๋–ป๊ฒŒ ๋™์‹œ์— ์‹คํ–‰๋˜๋Š”์ง€ ๊ทธ ์›๋ฆฌ์— ๋Œ€ํ•ด์„œ ์•Œ์•„๋ณด๋„๋ก ํ•˜๊ฒ ๋‹ค.

 

 

 

 

 

์š”์•ฝ

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

 

Reference

https://modoocode.com/269

 

์”น์–ด๋จน๋Š” C ++ - <15 - 1. ๋™์‹œ์— ์‹คํ–‰์„ ์‹œํ‚จ๋‹ค๊ณ ? - C++ ์“ฐ๋ ˆ๋“œ(thread)>

 

modoocode.com

๐Ÿ‘ฉ‍๐Ÿ’ป ‍์™„์ „ํžˆ ์ •๋ณตํ•˜๋Š” ํ”„๋กœ์„ธ์Šค vs ์Šค๋ ˆ๋“œ ๊ฐœ๋… (tistory.com)

 

๐Ÿ‘ฉ‍๐Ÿ’ป ‍์™„์ „ํžˆ ์ •๋ณตํ•˜๋Š” ํ”„๋กœ์„ธ์Šค vs ์Šค๋ ˆ๋“œ ๊ฐœ๋…

ํ•œ๋ˆˆ์— ์ดํ•ดํ•˜๋Š” ํ”„๋กœ์„ธ์Šค & ์Šค๋ ˆ๋“œ ๊ฐœ๋… ์ „๊ณต ์ง€์‹ ์—†์ด ์ปดํ“จํ„ฐ์˜ ํ”„๋กœ๊ทธ๋žจ์„ ์ด์šฉํ•˜๋Š”๋ฐ๋Š” ๋ฌธ์ œ ์—†์–ด ์™”์ง€๋งŒ ์†Œํ”„ํŠธ์›จ์–ด๋ฅผ ๊ฐœ๋ฐœํ•˜๋Š” ์‚ฌ๋žŒ์œผ๋กœ์„œ ์ปดํ“จํ„ฐ ์‹คํ–‰ ๋‚ด๋ถ€ ์š”์†Œ๋ฅผ ๋”ฐ์ ธ๋ณด๊ฒŒ ๋ ๋•Œ, ์•„

inpa.tistory.com

์ฝ”๋”ฉ์˜ ์‹œ์ž‘, TCP School

 

์ฝ”๋”ฉ๊ต์œก ํ‹ฐ์”จํ”ผ์Šค์ฟจ

4์ฐจ์‚ฐ์—…ํ˜๋ช…, ์ฝ”๋”ฉ๊ต์œก, ์†Œํ”„ํŠธ์›จ์–ด๊ต์œก, ์ฝ”๋”ฉ๊ธฐ์ดˆ, SW์ฝ”๋”ฉ, ๊ธฐ์ดˆ์ฝ”๋”ฉ๋ถ€ํ„ฐ ์ž๋ฐ” ํŒŒ์ด์ฌ ๋“ฑ

tcpschool.com

https://www.geeksforgeeks.org/thread-in-operating-system/

 

Thread in Operating System - GeeksforGeeks

A Computer Science portal for geeks. It contains well written, well thought and well explained computer science and programming articles, quizzes and practice/competitive programming/company interview Questions.

www.geeksforgeeks.org