[10๋ถ„ ํ…Œ์ฝ”ํ†ก] ๐ŸŒท ์ฝ”๋‹ค์˜ Process vs Thread

KIM YONG GUยท2023๋…„ 9์›” 9์ผ
0

์šฐ์•„ํ•œํ…Œํฌ

๋ชฉ๋ก ๋ณด๊ธฐ
5/41

ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ.

๋ญ”๊ฐ€ ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ผ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์„ ๊ฒƒ ๊ฐ™์€ ๊ธฐ๋Šฅ. ๋น„์Šทํ•œ ์˜๋ฏธ์ธ๊ฐ€?

<ํ‚ค์›Œ๋“œ>

  1. ์‹คํ–‰ ๋‹จ์œ„ - CPU Core์—์„œ ์‹คํ–‰ํ•˜๋Š” ํ•˜๋‚˜์˜ ๋‹จ์œ„๋กœ ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ๋ฅผ ํฌ๊ด„ํ•˜๋Š” ๊ฐœ๋…
  2. (๋ถ€์—ฐ ์„ค๋ช…์ด ์—†๋Š”) ํ”„๋กœ์„ธ์Šค - ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๋งŒ ๊ฐ€์ง€๊ณ  ์žˆ๋Š” ๋‹จ์ผ ์Šค๋ ˆ๋“œ ํ”„๋กœ์„ธ์Šค
  3. ๋™์‹œ์„ฑ - ํ•œ ์ˆœ๊ฐ„์— ์—ฌ๋Ÿฌ๊ฐ€์ง€ ์ผ์ด ์•„๋‹ˆ๋ผ, ์งง์€ ์ „ํ™˜์œผ๋กœ ์—ฌ๋Ÿฌ ๊ฐ€์ง€ ์ผ์„ ๋™์‹œ์— ์ฒ˜๋ฆฌํ•˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๋Š” ๊ฒƒ.

ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ๋Š” ์™„๋ฒฝํžˆ ๋‹ค๋ฅธ ๋ฌด์—‡์ธ๊ฐ€๊ฐ€ ์•„๋‹ˆ๋‹ค.

[์ˆœ์„œ]

1. Process & Thread

ํ”ผ์ž๊ฐ€๊ฒŒ ์˜ˆ์‹œ

ํ”ผ์ž ๋ ˆ์‹œํ”ผ = ์ฝ”๋“œ(โ‰ˆ ํ”„๋กœ๊ทธ๋žจ)
ํ”ผ์ž = ํ”„๋กœ์„ธ์Šค

์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ(Context Switching)
-> ์ด๋ฅผ ๊ฐœ์„ ํ•œ ๊ฒƒ์ด ๊ฒฝ๋Ÿ‰ํ™”๋œ ํ”„๋กœ์„ธ์Šค(Lightweight Process)


์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ(Context Switching)์€ ์ปดํ“จํ„ฐ ์šด์˜ ์ฒด์ œ์—์„œ ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ CPU(Central Processing Unit)๋ฅผ ๊ณต์œ ํ•  ๋•Œ ๋ฐœ์ƒํ•˜๋Š” ํ˜„์ƒ์ž…๋‹ˆ๋‹ค. ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์‹คํ–‰ ์ค‘์ธ ๋„์ค‘์— ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ ์ „ํ™˜๋˜๋Š” ๊ณผ์ •์„ ๋‚˜ํƒ€๋ƒ…๋‹ˆ๋‹ค. ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์€ ๋‹ค์Œ๊ณผ ๊ฐ™์€ ์ƒํ™ฉ์—์„œ ๋ฐœ์ƒํ•ฉ๋‹ˆ๋‹ค:

  1. ์šด์˜ ์ฒด์ œ๊ฐ€ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค๋กœ CPU ์‹œ๊ฐ„์„ ๋‚˜๋ˆ ์ฃผ๋Š” ๊ฒฝ์šฐ.
  2. ํ˜„์žฌ ์‹คํ–‰ ์ค‘์ธ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ž…์ถœ๋ ฅ(I/O) ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๊ณ  ๋Œ€๊ธฐํ•ด์•ผ ํ•˜๋Š” ๊ฒฝ์šฐ.
  3. ๋‹ค์ค‘ ํ”„๋กœ์„ธ์„œ ์‹œ์Šคํ…œ์—์„œ ์—ฌ๋Ÿฌ CPU ๊ฐ„์˜ ์ž‘์—…์„ ๋ถ„์‚ฐํ•  ๋•Œ.

์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์€ ๋น„์šฉ์ด ๋ฐœ์ƒํ•˜๋ฉฐ, ์‹œ์Šคํ…œ์˜ ์„ฑ๋Šฅ์— ์˜ํ–ฅ์„ ๋ฏธ์น  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค. ํ”„๋กœ์„ธ์Šค์˜ ์ƒํƒœ๋ฅผ ์ €์žฅํ•˜๊ณ  ๋ณต์›ํ•˜๋Š” ์ž‘์—…์ด ํ•„์š”ํ•˜๊ธฐ ๋•Œ๋ฌธ์ž…๋‹ˆ๋‹ค.

๊ฒฝ๋Ÿ‰ํ™”๋œ ํ”„๋กœ์„ธ์Šค(Lightweight Process)๋Š” ์ปจํ…์ŠคํŠธ ์Šค์œ„์นญ์˜ ๋น„์šฉ์„ ์ค„์ด๊ธฐ ์œ„ํ•œ ๊ฐœ๋…์ž…๋‹ˆ๋‹ค. ๊ฒฝ๋Ÿ‰ํ™”๋œ ํ”„๋กœ์„ธ์Šค๋Š” ์šด์˜ ์ฒด์ œ ์ˆ˜์ค€์—์„œ ๊ด€๋ฆฌ๋˜๋ฉฐ, ์ „ํ†ต์ ์ธ ํ”„๋กœ์„ธ์Šค์™€๋Š” ๋‹ค๋ฅด๊ฒŒ ์Šค๋ ˆ๋“œ(Thread)์ฒ˜๋Ÿผ ๊ฐ€๋ฒผ์šด ๋‹จ์œ„๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ๊ฒฝ๋Ÿ‰ํ™”๋œ ํ”„๋กœ์„ธ์Šค๋Š” ์ž์ฒด ์Šคํƒ๊ณผ ํ”„๋กœ์„ธ์Šค ์ œ์–ด ๋ธ”๋ก์„ ๊ฐ€์ง€๋ฉฐ, ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๊ฒฝ๋Ÿ‰ํ™”๋œ ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ•˜๋‚˜์˜ ์‹ค์ œ ํ”„๋กœ์„ธ์Šค(ํ”„๋กœ์„ธ์Šค ์ปจํ…Œ์ด๋„ˆ) ๋‚ด์—์„œ ์‹คํ–‰๋  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

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


๊ฒฝ๋Ÿ‰ํ™”๋œ ํ”„๋กœ์„ธ์Šค๋Š” ๋ณ„๊ฐœ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ Code, Data, Heap ์˜์—ญ์„ ๊ณตํ†ต์œผ๋กœ ์‚ฌ์šฉํ•˜๊ณ 
Stack๋งŒ์„ ๊ณ ์œ ํ•˜๊ฒŒ ๊ฐ–๋Š” ๊ฒƒ์ด๋‹ค.

2. Multi-process vs Multi-thread

๋ฉ€ํ‹ฐํ”„๋กœ์„ธ์Šค์™€ ๋ฉ€ํ‹ฐ์Šค๋ ˆ๋“œ ๋ชจ๋‘ ์ฒ˜๋ฆฌ ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ์ž„.
ํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ๋‹ค๋ฅธ ๋‘ ๊ฐ€์ง€ ์ฒ˜๋ฆฌ๋ฐฉ๋ฒ•์— ๋Œ€ํ•œ ์ด์•ผ๊ธฐ๋ฅผ ํ•˜๋Š” ๊ฒƒ์ž„.

Ex) Chrome์€ ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค ๋ฐฉ์‹, Explorer๋Š” ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ๋ฐฉ์‹์ž„

3. Multi-core

๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค์™€ & ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋Š” SW ๋ถ„์•ผ์ชฝ์— ๊ฐ€๊น๊ณ 
๋ฉ€ํ‹ฐ์ฝ”์–ด๋Š” HW ์ธก๋ฉด์˜ ์ด์•ผ๊ธฐ์— ์ข€ ๋” ๊ฐ€๊น๋‹ค.

๋ฉ€ํ‹ฐ์ฝ”์–ด์™€ ๊ด€๋ จ๋œ ํ‚ค์›Œ๋“œ๋Š” ๋™์‹œ์„ฑ๊ณผ ๋ณ‘๋ ฌ์ฒ˜๋ฆฌ์ด๋‹ค.

๋ฒˆ์™ธ : ๋ฆฌ๋ˆ…์Šค์—์„œ Process์™€ Thread

๋ฆฌ๋ˆ…์Šค ์ปค๋„์—์„œ๋Š” ํ”„๋กœ์„ธ์Šค์™€ ์Šค๋ ˆ๋“œ๋ฅผ ๋™์ผํ•˜๊ฒŒ ๋ณธ๋‹ค.

์Šค๋ ˆ๋“œ๋Š” ์‚ฌ์šฉ์ž ์Šค๋ ˆ๋“œ์™€ ์ปค๋„ ์Šค๋ ˆ๋“œ๋กœ ๋‚˜๋‰จ.
์‚ฌ์šฉ์ž ๋ ˆ๋ฒจ๊ณผ ์ปค๋„ ๋ ˆ๋ฒจ.
๋‹ค๋Œ€์ผ, ์ผ๋Œ€์ผ, ๋‹ค๋Œ€๋Œ€ ๋ชจ๋ธ์ด ์žˆ์Œ.
๋ฆฌ๋ˆ…์Šค๋Š” ์ผ๋Œ€์ผ ๋ชจ๋ธ์ž„
๊ทธ๋ž˜์„œ ๋ฆฌ๋ˆ…์Šค์—์„œ๋Š” ์‚ฌ์šฉ์ž ์Šค๋ ˆ๋“œ์™€ ์ปค๋„ ์Šค๋ ˆ๋“œ๋ฅผ ๋™์ผํ•˜๊ฒŒ ๋ณธ๋‹ค๋Š” ์ด์•ผ๊ธฐ๋ฅผ ํ•˜๋Š” ๊ฒƒ์ž„.

4. ์š”์•ฝ

  1. ํ”„๋กœ์„ธ์Šค๋Š” ํ”„๋กœ๊ทธ๋žจ์ด ์‹คํ–‰๋œ ๊ฒƒ์ด๋‹ค.
  2. ์Šค๋ ˆ๋“œ๋Š” ํ•œ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ๋‚˜๋‰˜์–ด์ง„ ํ•˜๋‚˜ ์ด์ƒ์˜ ์‹คํ–‰ ๋‹จ์œ„์ด๋‹ค.
  3. ํ•œ ์–ดํ”Œ๋ฆฌ์ผ€์ด์…˜์— ๋Œ€ํ•œ ์ž‘์—…์„ ๋™์‹œ์— ํ•˜๊ธฐ ์œ„ํ•ด์„œ๋Š” 2๊ฐ€์ง€ ์ฒ˜๋ฆฌ ๋ฐฉ์‹(๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค, ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ)์ด ์žˆ๋‹ค.
  4. ๋™์‹œ์— ์‹คํ–‰์ด ๋˜๋Š” ๊ฒƒ์ฒ˜๋Ÿผ ๋ณด์ด๊ธฐ ์œ„ํ•ด์„œ ์‹คํ–‰ ๋‹จ์œ„๋Š” ์‹œ๋ถ„ํ• ๋กœ cpu๋ฅผ ์ ์œ ํ•˜๋ฉฐ context switching์„ ํ•œ๋‹ค. (์ผ์ข…์˜ ์ˆœ์ฐจ ์‹คํ–‰, ๊ทธ๋Ÿฌ๋‚˜ ๋งค์šฐ ๋น ๋ฅธ)
  5. ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๋Š” ๋…๋ฆฝ์ ์ธ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ฐ€์ง€๊ณ  ์žˆ์ง€๋งŒ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋Š” ์ž์›์„ ๊ณต์œ ํ•œ๋‹ค. ๊ทธ๊ฒƒ์— ๋”ฐ๋ฅธ ๊ฐ๊ฐ์˜ ์žฅ๋‹จ์ ์ด ์žˆ๋‹ค.
  6. ๋ฉ€ํ‹ฐ ์ฝ”์–ด๋Š” ํ•˜๋“œ์›จ์–ด ์ธก๋ฉด์—์„œ ์‹คํ–‰ ๋‹จ์œ„๋ฅผ ๋ณ‘๋ ฌ์ ์œผ๋กœ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋„๋ก ์—ฌ๋Ÿฌ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์žˆ๋Š” ๊ฒƒ์ด๋‹ค.
profile
Engineer, Look Beyond the Code.

0๊ฐœ์˜ ๋Œ“๊ธ€