Odds and Ends

์šด์˜์ฒด์ œ ๊ต์•ˆ Chap 05 ์Šค๋ ˆ๋“œ ๋ณธ๋ฌธ

์šด์˜์ฒด์ œ

์šด์˜์ฒด์ œ ๊ต์•ˆ Chap 05 ์Šค๋ ˆ๋“œ

Squidward 2022. 10. 26. 18:59

[Overview - 1]

๐Ÿ“Œ ์Šค๋ ˆ๋“œ๋ž€?  > ์‹คํ–‰๋˜๋Š” ํ๋ฆ„

: CPU ์ด์šฉ์˜ ๊ธฐ๋ณธ ๋‹จ์œ„

- ์ œ์–ด ํ๋ฆ„ ํ‘œํ˜„

- ์Šค๋ ˆ๋“œ ID, ํ”„๋กœ๊ทธ๋žจ ์นด์šดํ„ฐ (PC), ๋ ˆ์ง€์Šคํ„ฐ ์ง‘ํ•ฉ, ์Šคํƒ์œผ๋กœ ๊ตฌ์„ฑ

- ๊ฐ™์€ ํ”„๋กœ์„ธ์Šค์— ์†ํ•œ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์™€ ์ฝ”๋“œ, ๋ฐ์ดํ„ฐ ์„น์…˜, ๊ทธ๋ฆฌ๊ณ  ์—ด๋ฆฐ ํŒŒ์ผ์ด๋‚˜ ์‹ ํ˜ธ์™€ ๊ฐ™์€ ์šด์˜์ฒด์ œ ์ž์›๋“ค์„ ๊ณต์œ 

-  Single threaded program: 1 process์— 1 thread (ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค์— ์‹คํ–‰ํ๋ฆ„์€ ํ•˜๋‚˜, main thread 1๊ฐœ)

์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ -> ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ

[์‹ฑ๊ธ€ ์Šค๋ ˆ๋“œ > ๋ฉ€ํ‹ฐ์Šค๋ž˜๋“œ]

  • ์Šคํƒ ๊ณต์œ  ์•ˆํ•จ : ์‹คํ–‰ ์‹œ ๋กœ์ปฌ ๋ณ€์ˆ˜๊ฐ€ ๋”ฐ๋กœ๋”ฐ๋กœ ๋งŒ๋“ค์–ด ์ฃผ์–ด์•ผํ•จ
  • ํ•จ์ˆ˜ ๋‹จ์œ„๋กœ ์Šค๋ ˆ๋“œ ๋งŒ๋“ฆ. > 3ํ•จ์ˆ˜ 3์Šค๋ ˆ๋“œ(์‹คํ–‰ํ๋ฆ„ 3๊ฐœ)
  • ์Šค๋ ˆ๋“œ ๊ฐ„ ์„œ๋กœ ๊ณต์œ ํ•˜๋Š” ๊ฒƒ : ์ฝ”๋“œ, ๋ฐ์ดํ„ฐ, ํŒŒ์ผ, ์ „์—ญ๋ณ€์ˆ˜ ๊ธฐ๋ณธ์ ์œผ๋กœ ๊ณต์œ . 

* ํ”„๋กœ์„ธ์Šค๋Š” ๋Œ€๋žต์ ์œผ๋กœ ์œ„์—์„œ ์•„๋ž˜๋กœ [ํ•จ์ˆ˜ > ๋ฐ์ดํ„ฐ > ์Šคํƒ๋ฉ”๋ชจ๋ฆฌ] ๋กœ ๊ตฌ์„ฑ๋จ.

๐Ÿ“Œ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ  (multihread)

- Multiprogramming์€ Multithread๊ฐ€ ์•„๋‹˜

[๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ  ์žฅ์ ]

* ์‘๋‹ต์„ฑ
- ๋Œ€ํ™”ํ˜• ์‘์šฉ์„ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œํ™”ํ•˜๋ฉด ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์˜ ์ผ๋ถ€๋ถ„์ด ๋ด‰์‡„๋˜๊ฑฐ๋‚˜, ์‘์šฉ ํ”„๋กœ๊ทธ๋žจ์ด ๊ธด ์ž‘์—…์„ ํ•˜๋”๋ผ๋„ ํ”„๋กœ๊ทธ๋žจ์ด ๊ณ„์†๋˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉ => ์‚ฌ์šฉ์ž์—๊ฒŒ ์‘๋‹ต์„ฑ ์ฆ๊ฐ€ ex. ๋‹จ์ผ ์Šค๋ ˆ๋“œ -> ์—ฐ์‚ฐ์ด ์™„๋ฃŒ๋  ๋•Œ๊นŒ์ง€ ์‘๋‹ต x

* ์ž์› ๊ณต์œ 

- ์ž๋™์œผ๋กœ ํ”„๋กœ์„ธ์Šค์˜ ์ž์›๋“ค๊ณผ ๋ฉ”๋ชจ๋ฆฌ๋ฅผ ๊ณต์œ ํ•œ๋‹ค. ํ”„๋กœ์„ธ์Šค๋Š” ์ž๋™ X

-  ์ฝ”๋“œ์™€ ๋ฐ์ดํ„ฐ ๊ณต์œ ์˜ ์ด์ ์€ ํ•œ ์‘์šฉ์ด ํ”„๋กœ๊ทธ๋žจ์ด ๊ฐ™์€ ์ฃผ์†Œ ๊ณต๊ฐ„ ๋‚ด์— ์—ฌ๋Ÿฌ ๊ฐœ์˜ ๋‹ค๋ฅธ ์ž‘์—…์„ ํ•˜๋Š” ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ€์งˆ ์ˆ˜ ์žˆ๋‹ค.

 

* ๊ฒฝ์ œ์„ฑ 
- ์ž์› ๊ณต์œ ๋•Œ๋ฌธ์— ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•˜๊ณ  ๋ฌธ๋งฅ ๊ตํ™˜ํ•˜๋Š” ๊ฒƒ์ด ๋”์šฑ๋” ๊ฒฝ์ œ์ 

- ์Šค๋ ˆ๋“œ ์ƒ์„ฑ์€ ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ๋ณด๋‹ค ์‹œ๊ฐ„๊ณผ ๋ฉ”๋ชจ๋ฆฌ ๋œ ์†Œ๋น„
- ๋ฌธ๋งฅ ๊ตํ™˜์€ ํ”„๋ ˆ์„ธ์Šค ์‚ฌ์ด๋ณด๋‹ค ์Šค๋ ˆ๋“œ ์‚ฌ์ด์—์„œ ๋” ๋น ๋ฅด๋‹ค.

 

* ๊ทœ๋ชจ ์ ์‘์„ฑ (Utilization of MP Architecture)
- ๋‹ค์ค‘ ์ฒ˜๋ฆฌ๊ธฐ ๊ตฌ์กฐ์—์„œ ์‹คํ–‰ํ•˜์—ฌ ๊ฐ๊ฐ์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋‹ค๋ฅธ ์ฒ˜๋ฆฌ๊ธฐ์—์„œ ๋ณ‘๋ ฌ๋กœ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.

 

๐Ÿ“Œ ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ ๋ฐฉ์‹

๐Ÿ’ก1 ์š”์ฒญ ๋‹น 1 ์Šค๋ ˆ๋“œ

ex. 1000๋ช…์˜ ์‚ฌ์šฉ์ž ? > 1000๊ฐœ ์Šค๋ ˆ๋“œ๋จ > ์Šคํƒ๋„ 1000๊ฐœ ๋งŒ๋“ค์–ด์ง(2k์ •๋„)

> 1000๊ฐœ ์ค‘ 5๊ฐœ๊ฐ€ ์ฃฝ์œผ๋ฉด ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ์— ์˜ํ–ฅ์ด ์žˆ๋Š” ๊ฐ€? > ์—†๋‹ค! 955๊ฐœ๋Š” ๊ทธ๋Œ€๋กœ ์ •์ƒ์ ์œผ๋กœ ์‹คํ–‰๋จ.

 

* ์˜ค๋ฅ˜ ๋‚˜๋„ ๋‹ค๋ฅธ๊ฑด ๊ดœ์ฐฎ์Œ > ์•ˆ์ •์„ฑ์ด ๋†’๋‹ค!

 

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

: ํ”„๋กœ์„ธ์Šค๋Š” ์šด์˜์ฒด์ œ๋กœ๋ถ€ํ„ฐ ์ž์›์„ ํ• ๋‹น๋ฐ›๋Š” ์ž‘์—…์˜ ๋‹จ์œ„์ด๊ณ  ์Šค๋ ˆ๋“œ๋Š” ํ”„๋กœ์„ธ์Šค๊ฐ€ ํ• ๋‹น๋ฐ›์€ ์ž์›์„ ์ด์šฉํ•˜๋Š” ์‹คํ–‰์˜ ๋‹จ์œ„์ด๋‹ค.

- ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋Š” ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๋ณด๋‹ค ์ ์€ ๋ฉ”๋ชจ๋ฆฌ ๊ณต๊ฐ„์„ ์ฐจ์ง€ํ•˜๊ณ  Context Switching์ด ๋น ๋ฅธ ์žฅ์ ์ด ์žˆ์ง€๋งŒ, ๋™๊ธฐํ™” ๋ฌธ์ œ์™€ ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ ์žฅ์• ๋กœ ์ „์ฒด ์Šค๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ ๋  ์œ„ํ—˜์„ ๊ฐ–๊ณ  ์žˆ๋‹ค.

- ๋ฉ€ํ‹ฐ ํ”„๋กœ์„ธ์Šค๋Š” ํ•˜๋‚˜์˜ ํ”„๋กœ์„ธ์Šค๊ฐ€ ์ฃฝ๋”๋ผ๋„ ๋‹ค๋ฅธ ํ”„๋กœ์„ธ์Šค์— ์˜ํ–ฅ์„ ์ฃผ์ง€ ์•Š์•„ ์•ˆ์ •์„ฑ์ด ๋†’์ง€๋งŒ, ๋ฉ€ํ‹ฐ ์Šค๋ ˆ๋“œ๋ณด๋‹ค ๋งŽ์€ ๋ฉ”๋ชจ๋ฆฌ๊ณต๊ฐ„๊ณผ CPU ์‹œ๊ฐ„์„ ์ฐจ์ง€ํ•˜๋Š” ๋‹จ์ ์ด ์žˆ๋‹ค.

- ๋‘ ๋ฐฉ๋ฒ•์€ ๋™์‹œ์— ์—ฌ๋Ÿฌ ์ž‘์—…์„ ์ˆ˜ํ–‰ํ•˜๋Š” ์ ์—์„œ ๋™์ผํ•˜์ง€๋งŒ, ๊ฐ๊ฐ์˜ ์žฅ๋‹จ์ด ์žˆ์œผ๋ฏ€๋กœ ์ ์šฉํ•˜๋Š” ์‹œ์Šคํ…œ์— ๋”ฐ๋ผ ์ ํ•ฉํ•œ ๋™์ž‘ ๋ฐฉ์‹์„ ์„ ํƒํ•˜๊ณ  ์ ์šฉํ•ด์•ผ ํ•œ๋‹ค.

 

๐Ÿ“Œ ์‚ฌ์šฉ์ž ์Šค๋ ˆ๋“œ

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

 

๋Œ€ํ‘œ์  ์˜ˆ์‹œ : POSIX Pthreads, Mach C-threads, Solaris threads

๐Ÿ“Œ ์ปค๋„ ์Šค๋ ˆ๋“œ

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

 

๐Ÿ“Œ POSIX๋ž€?

: ๋‹ค๋ฅธ ์šด์˜์ฒด์ œ๋“ค ์‚ฌ์ด์˜ ํ˜ธํ™˜์„ฑ์„ ์œ„ํ•ด IEEE์—์„œ ๋งŒ๋“  ํ‘œ์ค€, Unix์— ๊ธฐ๋ฐ˜

> ๊ฐ ํšŒ์‚ฌ๋ผ๋ฆฌ ํ˜ธํ™˜์ด ์•ˆ๋ผ์„œ ์œ ๋‹‰์Šค๋กœ ์„œ๋กœ ํ˜ธํ™˜๋˜๋„๋ก ํ‘œ์ค€์•ˆ์œผ๋กœ ๋งŒ๋“  ๊ฒƒ์ž„

 

๐Ÿ“Œ Many to One

: ๋ณ‘๋ ฌ์„ฑ ๊ฐ€์žฅ ๋–จ์–ด์ง, ํšจ์œจ์„ฑ ์ข‹์Œ

- ๋งŽ์€ ์‚ฌ์šฉ์ž ์ˆ˜์ค€ ์Šค๋ ˆ๋“œ๋ฅผ ํ•˜๋‚˜์˜ ์ปค๋„ ์Šค๋ ˆ๋“œ๋กœ ์‚ฌ์ƒ

- ์ปค๋„์— ์ ‘๊ทผ ์‹œ ONE ์Šค๋ ˆ๋“œ๋กœ ์ ‘๊ทผ ๊ฐ€๋Šฅ

- ์Šค๋ ˆ๋“œ ๊ด€๋ฆฌ : ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์˜ ์Šค๋ ˆ๋“œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ > ์ปค๋„ ์Šค๋ ˆ๋“œ์—์„œ ์‚ฌ์šฉ ์•ˆ๋จ!

๐Ÿ“Œ One to One

: ๋ณ‘๋ ฌ์„ฑ ๊ฐ€์žฅ ์ข‹์Œ,์ปค๋„ ๋‚ญ๋น„ ์‹ฌํ•จ ํšจ์œจ์„ฑ ๋–จ์–ด์ง

-  ๊ฐ ์‚ฌ์šฉ์ž ์Šค๋ ˆ๋“œ๋ฅผ ๊ฐ๊ฐ ํ•˜๋‚˜์˜ ์ปค๋„ ์Šค๋ ˆ๋“œ ๋Œ€์‘๋จ > ์‚ฌ์ง„ ์ฐธ๊ณ 

-  ํ•˜๋‚˜์˜ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ด‰์‡„์  ์‹œ์Šคํ…œ ์ฝœ์„ ํ˜ธ์ถœํ•˜๋”๋ผ๋„ ๋‹ค๋ฅธ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰๋  ์ˆ˜ ์žˆ๊ธฐ ๋•Œ๋ฌธ์— ๋” ๋งŽ์€ ๋ณ‘๋ ฌ์„ฑ ์ œ๊ณต

-  ๋‹ค์ค‘ ์ฒ˜๋ฆฌ๊ธฐ์—์„œ ๋‹ค์ค‘ ์Šค๋ ˆ๋“œ๊ฐ€ ๋ณ‘๋ ฌ๋กœ ์ˆ˜ํ–‰๋˜๋Š” ๊ฒƒ์„ ํ—ˆ์šฉ

๋‹จ์ : ์‚ฌ์šฉ์ž ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ค๋ ค๋ฉด ํ•ด๋‹น ์ปค๋„ ์Šค๋ ˆ๋“œ๋ฅผ ๋งŒ๋“ค์–ด์•ผ๋˜๋Š”๋ฐ ๋งŽ์€ ์ˆ˜์˜ ์ปค๋„ ์Šค๋ ˆ๋“œ๊ฐ€ ์‹œ์Šคํ…œ ์„ฑ๋Šฅ์— ๋ถ€๋‹ด

๐Ÿ“Œ Many to Many

: ์ค‘์žฌ, ๋ณด์™„ํ•œ ๊ฒƒ. ์„ฑ๋Šฅ์ ์ธ ์ธก๋ฉด์—์„œ ๋ฐ”๋žŒ์ง.

- ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์‚ฌ์šฉ์ž ์ˆ˜์ค€ ์Šค๋ ˆ๋“œ๋ฅผ ๊ทธ๋ณด๋‹ค ์ž‘์€ ์ˆ˜, ํ˜น์€ ๊ฐ™์€ ์ˆ˜์˜ ์ปค๋„ ์Šค๋ ˆ๋“œ

- ํ•„์š”ํ•œ ๋งŒํผ ๋งŽ์€ ์‚ฌ์šฉ์ž ์ˆ˜์ค€ ์Šค๋ ˆ๋“œ๋ฅผ ์ƒ์„ฑํ•  ์ˆ˜ ์žˆ๋‹ค.

- ์ƒ์‘ํ•˜๋Š” ์ปค๋„ ์Šค๋ ˆ๋“œ๊ฐ€ ๋‹ค์ค‘ ์ฒ˜๋ฆฌ๊ธฐ์—์„œ ๋ณ‘๋ ฌ๋กœ ์ˆ˜ํ–‰๋  ์ˆ˜ ์žˆ๋‹ค.

๋‹จ์ :

- ์‹ค์ œ๋กœ ๊ตฌํ˜„ํ•˜๊ธฐ๊ฐ€ ์–ด๋ ต๋‹ค.

 

๐Ÿ“Œ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ

: ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋๋‚œ๋‹ค  = ๋ฉ”์ธ์Šค๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋œ๋‹ค. child ์Šค๋ ˆ๋“œ๋„ ์ข…๋ฃŒ๋จ > ๋ชจ๋“  ์Šค๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒ๋œ๋‹ค.

- ์ฆ‰ ํ”„๋กœ์„ธ์Šค๊ฐ€ ๋๋‚˜๋ฉด ํ•ด๋‹น ํ”„๋กœ์„ธ์Šค๋‚ด์—์„œ ์ƒ์„ฑ๋œ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋Š” ์†Œ๋ฉธ๋œ๋‹ค.

- ํ•œ ํ”„๋กœ์„ธ์Šค ๋‚ด์—์„œ ์ƒ์„ฑ๋œ ๋ชจ๋“  ์Šค๋ ˆ๋“œ๋Š” ์ „์—ญ๋ณ€์ˆ˜๋ฅผ ๊ณต์œ ํ•œ๋‹ค. (์ง€์—ญ๋ณ€์ˆ˜๋Š” ์ œ๊ฐ๊ธฐ ์†Œ์œ ํ•จ)

- ํ”„๋กœ์„ธ์Šค ์ƒ์„ฑ์— ๋น„ํ•ด ์Šค๋ ˆ๋“œ ์ƒ์„ฑ์€ ์ƒ๋Œ€์ ์œผ๋กœ ๋น„์šฉ(cpu, memory)์ด ๋‚ฎ๋‹ค. 

 

๐Ÿ“Œ ๋ฆฌ๋ˆ…์Šค ์Šค๋ ˆ๋“œ

* ๋ฆฌ๋ˆ…์Šค์—์„œ ์Šค๋ ˆ๋“œ ๋งŒ๋“œ๋Š” ๋ฒ• 

- ๋ฆฌ๋ˆ…์Šค๋Š” ์ด๋“ค์„ ์Šค๋ ˆ๋“œ๋ณด๋‹ค๋Š” ํƒœ์Šคํฌ๋ผ๊ณ  ๋ถ€๋ฅธ๋‹ค.
- ์Šค๋ ˆ๋“œ๋Š” clone() ์‹œ์Šคํ…œ ํ˜ธ์ถœ์„ ํ†ตํ•ด ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.
- clone()๋ฅผ ํ†ตํ•ด ํ•˜์œ„ ์ž‘์—…์ด ์ƒ์œ„ ์ž‘์—…(ํ”„๋กœ์„ธ์Šค)์˜ ์ฃผ์†Œ ๊ณต๊ฐ„์„ ๊ณต์œ ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

 

๐Ÿ“Œ JAVA ์Šค๋ ˆ๋“œ

* ์ž๋ฐ”์—์„œ ์Šค๋ ˆ๋“œ ๋งŒ๋“œ๋Š” ๋ฒ•

: Thread(์Šค๋ ˆ๋“œ)๋ฅผ ์ƒ์†๋ฐ›๋Š” ํด๋ž˜์Šค๋ฅผ ๋งŒ๋“ค๊ณ  , ๊ทธ ์•ˆ์— run() ํ•จ์ˆ˜๋ฅผ ๊ตฌํ˜„ํ•œ๋‹ค.

- ๋Ÿฐ ํ•จ์ˆ˜๋Š” ๋ณ„๋„์˜ ์Šค๋ ˆ๋“œ๋กœ ๋Œ์•„๊ฐ. runner.start(); > ์Šค๋ ˆ๋“œ ์‹คํ–‰

 

๐Ÿ“Œ ์Šค๋ ˆ๋“œ creation - posix (์œ ๋‹‰์Šค ๋ณ€ํ˜•ํ•œ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ(?) > ์ด์‹์„ฑ ์ข‹์Œ)

int pthread_create(pthread_t *t_id, pthread_attr_t *attr,
    void *(start_function)(void *), void *arg); # input ํƒ€์ž…์ด void ํฌ์ธํ„ฐ

– Header files

• #include<pthread.h>

– Parameters

  • t_id:์ƒ์„ฑ๋œthread’sID๋ฅผ์ €์žฅ
  • attr:์ƒ์„ฑํ• thread์˜ํŠน์„ฑ์„์„ค์ •,ํŠน๋ณ„ํžˆ์„ค์ •ํ• ๊ฒƒ์ด์—†๋‹ค๋ฉด NULL
  • start_function:์ƒ์„ฑ๋ thread๊ฐ€์ฒ˜์Œ์‹คํ–‰ํ•˜๋Š”ํ•จ์ˆ˜์ด๋ฆ„์œผ๋กœ, ์ด ํ•จ์ˆ˜๊ฐ€ ์ข…๋ฃŒ์™€ ๋™์‹œ์— thread๋„ ์†Œ๋ฉธ๋œ๋‹ค.
  • arg:start_function์ด์ˆ˜ํ–‰๋ ๋•Œ์ „๋‹ฌ๋˜๋Š”์ธ์ž – Returns
  • ์„ฑ๊ณต์‹œ0,์‹คํŒจ์‹œ์ด์™ธ์˜๊ฐ’

๐Ÿ“Œ Pthreads

  •  POSIX๊ฐ€ ์Šค๋ ˆ๋“œ ์ƒ์„ฑ๊ณผ ๋™๊ธฐํ™”๋ฅผ ์œ„ํ•ด ์ œ์ •ํ•œ ํ‘œ์ค€ API
  • ์Šค๋ ˆ๋“œ์˜ ๋™์žฅ์— ๊ด€ํ•œ ๋ช…์„ธ(Implementation)์ผ ๋ฟ์ด์ง€ ๊ทธ๊ฒƒ ์ž์ฒด๋ฅผ ๊ตฌํ˜„(Specification)ํ•œ ๊ฒƒ์€ ์•„๋‹ˆ๋‹ค.
  •  ์ด ๋ช…์„ธ๋ฅผ ๊ฐ€์ง€๊ณ  ์šด์˜์ฒด์ œ ์„ค๊ณ„์ž๋“ค์€ ๊ทธ๋“ค ๋‚˜๋ฆ„๋Œ€๋กœ ๊ตฌํ˜„ํ•  ์ˆ˜ ์žˆ๋‹ค.
  • Unix(Linux, macOS)์ด Pthreads ๋ช…์„ธ๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค. โˆ™์˜ˆ์ œ

๐Ÿ“Œ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ - POSIX (1)

: ์‹คํ–‰ ์ˆœ์„œ ํŒŒ์•…ํ•˜๊ธฐ

 

[์ถœ๋ ฅ ๊ฒฐ๊ณผ ์ˆœ์„œ]

1. ์ƒ์„ฑ๋œ thread ID ~

(2์ดˆ ํ›„)

2.  ์“ฐ๋ ˆ๋“œ ์‹คํ–‰์ค‘

(1์ดˆ ํ›„)

3. main() ์ข…๋ฅ˜

 

* 2๋ฒˆ ๋‹ค์‹œ ์‹คํ–‰ํ•˜๋ ค๊ณ  ๋Œ€๊ธฐ ์ค‘์ธ๋ฐ ๋๋‚˜๋ฒ„๋ฆผ > child ์Šค๋ ˆ๋“œ ์ข…๋ฃŒ๋จ

* ๋ฆฌ๋ˆ…์Šค์—์„œ ์ปดํŒŒ์ผ ํ•˜๋Š” ๋ฒ•

: > gcc -D_REENTRANT thread1.c -0 thread1 -lpthread

D_REENTRANT: ๋™์‹œํ˜ธ์ถœ ๊ฐ€๋Šฅ (์˜๋ฏธ๋Š” ๋ชจ๋ฆ„, ํ†ต์•”๊ธฐํ•ด)

 

๐Ÿ“Œ ์Šค๋ ˆ๋“œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ - POSIX (2)

* pthread_join() : ์Šค๋ ˆ๋“œ๊ฐ€ ์ข…๋ฃŒํ• ๋•Œ๊นŒ์ง€ ๊ธฐ๋‹ค๋ฆฐ๋‹ค.

* phread_create() : ์Šค๋ ˆ๋“œ ์‹๋ณ„์ž & ์Šค๋ ˆ๋“œ ์†์„ฑ + ์ƒˆ๋กœ์šด ์Šค๋ ˆ๋“œ๊ฐ€ ์‹คํ–‰์„ ์‹œ์ž‘ํ•  ํ•จ์ˆ˜์˜ ์ด๋ฆ„ ๋„ฃ์–ด์คŒ

- pthread_join() ํ•จ์ˆ˜๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ ์—ฌ๋Ÿฌ ๊ฐœ์˜ ์Šค๋ ˆ๋“œ๋ฅผ ๊ธฐ๋‹ค๋ฆฌ๋Š” ๊ฐ„๋‹จํ•œ ๋ฐฉ๋ฒ•์€ for ๋ฐ˜๋ณต๋ฌธ์œผ ๋กœ ๋‘˜๋Ÿฌ์‹ธ๋Š” ๊ฒƒ์ด๋‹ค.

 

728x90