CS/운영체제

[운영체제] μŠ€λ ˆλ“œμ™€ λ©€ν‹°μŠ€λ ˆλ”©

1eehyunji 2023. 8. 30. 19:24

μŠ€λ ˆλ“œ(thread)

μŠ€λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€μ˜ μ‹€ν–‰ κ°€λŠ₯ν•œ κ°€μž₯ μž‘μ€ λ‹¨μœ„μ΄λ‹€. ν”„λ‘œμ„ΈμŠ€λŠ” μ—¬λŸ¬ μŠ€λ ˆλ“œλ₯Ό κ°€μ§ˆ 수 μžˆλ‹€. 

 

μ½”λ“œ, 데이터, μŠ€νƒ, νž™μ„ 각각 μƒμ„±ν•΄μ„œ μžμ‹ λ§Œμ˜ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ κ°€μ§€λŠ” ν”„λ‘œμ„ΈμŠ€μ™€λŠ” 달리 μŠ€λ ˆλ“œλŠ” μ½”λ“œ, 데이터, νž™μ€ μŠ€λ ˆλ“œλΌλ¦¬ μ„œλ‘œ κ³΅μœ ν•˜κ³ , κ·Έ 외에 μ˜μ—­μ€ 각각 μƒμ„±λœλ‹€.

 

λ©€ν‹°μŠ€λ ˆλ”©(multi-threading)

  λ©€ν‹°μŠ€λ ˆλ”©μ€ ν”„λ‘œμ„ΈμŠ€ λ‚΄ μž‘μ—…μ„ μ—¬λŸ¬ 개의 μŠ€λ ˆλ“œ, 즉 λ©€ν‹°μŠ€λ ˆλ“œλ‘œ μ²˜λ¦¬ν•˜λŠ” 기법이닀.

μŠ€λ ˆλ“œλΌλ¦¬ μŠ€νƒ μ˜μ—­μ„ μ œμ™Έν•œ λ©”λͺ¨λ¦¬λ₯Ό μ„œλ‘œ κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ—, 데이터 μ˜μ—­μ— μ €μž₯된 μ „μ—­ λ³€μˆ˜(global)λ‚˜ 정적 λ³€μˆ˜(static), νž™μ— μ €μž₯된 malloc에 μ˜ν•œ 동적할당 등에 λŒ€ν•œ 정보λ₯Ό κ³΅μœ ν•  수 μžˆλ‹€.

이와 같이, ν”„λ‘œμ„ΈμŠ€κ°„ 톡신(IPC)와 같은 과정을 κ±°μΉ˜μ§€ μ•Šμ•„λ„ 정보λ₯Ό κ³΅μœ ν•  수 있기 λ•Œλ¬Έμ— νš¨μœ¨μ„±μ΄ λ†’λ‹€.

 

  μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­λ©΄μ—μ„œλ„ μž₯점이 μžˆλ‹€. ν”„λ‘œμ„ΈμŠ€μ˜ μ»¨ν…μŠ€νŠΈ μŠ€μœ„μΉ­μ—μ„  ν”„λ‘œμ„ΈμŠ€κ°„μ˜ λ©”λͺ¨λ¦¬λ₯Ό κ³΅μœ ν•˜μ§€ μ•ŠκΈ° λ•Œλ¬Έμ— ν”„λ‘œμ„ΈμŠ€κ°€ λ°”λ€Œλ©΄ μ§€κΈˆκ» μŒ“μ•„μ˜¨ μΊμ‹œ 데이터듀을 μ΄ˆκΈ°ν™”ν•˜κ³  μ²˜μŒλΆ€ν„° λ‹€μ‹œ μΊμ‹œ 데이터λ₯Ό μŒ“μ•„μ•Ό ν•œλ‹€.

ν•˜μ§€λ§Œ, μŠ€λ ˆλ“œμ˜ κ²½μš°λŠ” λ©”λͺ¨λ¦¬ 곡간을 κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ— μŠ€λ ˆλ“œκ°€ λ°”λ€Œλ”λΌλ„ κΈ°μ‘΄ μΊμ‹œ 데이터가 μ˜λ―ΈμžˆλŠ” 데이터가 λ˜λ―€λ‘œ μ‹œκ°„μ΄λ‚˜ λΉ„μš©λ©΄μ—μ„œ 뢀담이 더 적닀.

 

  ν•˜μ§€λ§Œ ν•œ μŠ€λ ˆλ“œκ°€ λ©”λͺ¨λ¦¬ 곡간을 λ§κ°€λœ¨λ¦¬λŠ” λ“±κ³Ό 같은 λ¬Έμ œκ°€ 생기면 같은 λ©”λͺ¨λ¦¬ 곡간을 κ³΅μœ ν•˜λŠ” λ‹€λ₯Έ μŠ€λ ˆλ“œλ“€μ—λ„ 영ν–₯을 λ―Έμ³μ„œ μŠ€λ ˆλ“œλ‘œ 이루어져 μžˆλŠ” ν”„λ‘œμ„ΈμŠ€μ— μ•…μ˜ν–₯을 쀄 수 μžˆλŠ” 단점이 μžˆλ‹€.

 

λ©€ν‹°μŠ€λ ˆλ“œμ˜ λŒ€ν‘œμ μΈ μ˜ˆλ‘œλŠ” μ›Ή λΈŒλΌμš°μ €μ˜ λ Œλ”λŸ¬ ν”„λ‘œμ„ΈμŠ€λ₯Ό 예둜 λ“€ 수 μžˆλ‹€.

 

λ Œλ”λŸ¬ ν”„λ‘œμ„ΈμŠ€λŠ” νƒ­ λ‚΄λΆ€μ—μ„œ λ°œμƒν•˜λŠ” λͺ¨λ“  μž‘μ—…μ„ λ‹΄λ‹Ήν•œλ‹€. λ Œλ”λŸ¬ ν”„λ‘œμ„ΈμŠ€μ˜ μ£Όμš” 역할은 HTMLκ³Ό CSS, JavaScriptλ₯Ό μ‚¬μš©μžμ™€ μƒν˜Έμž‘μš©μ„ ν•  수 μžˆλŠ” μ›Ή νŽ˜μ΄μ§€λ‘œ λ³€ν™˜ν•˜λŠ” 것이닀.

λ Œλ”λŸ¬ ν”„λ‘œμ„ΈμŠ€μ˜ 메인 μŠ€λ ˆλ“œκ°€ λΈŒλΌμš°μ €λ‘œ μ „μ†‘λœ λŒ€λΆ€λΆ„μ˜ μ½”λ“œλ₯Ό μ²˜λ¦¬ν•œλ‹€. κ°„ν˜Ή μ›Ή μ›Œμ»€λ‚˜ μ„œλΉ„μŠ€ μ›Œμ»€λ₯Ό μ‚¬μš©ν•˜λŠ” κ²½μš°μ—λŠ” μ›Œμ»€ μŠ€λ ˆλ“œκ°€ JavaScript μ½”λ“œμ˜ 일뢀λ₯Ό μ²˜λ¦¬ν•œλ‹€. μ›Ή νŽ˜μ΄μ§€λ₯Ό 효율적이고 λΆ€λ“œλŸ½κ²Œ λ Œλ”λ§ν•˜κΈ° μœ„ν•΄ λ³„λ„μ˜ 컴포지터 μŠ€λ ˆλ“œκ°€ λ ˆμ΄μ–΄λ₯Ό ν•©μ„±ν•˜κ³ , λž˜μŠ€ν„° μŠ€λ ˆλ“œκ°€ 화면을 ν”½μ…€λ‘œ λ³€ν™˜ν•œλ‹€.

* μ›Ή μ›Œμ»€(Web Worker) : https://developer.mozilla.org/ko/docs/Web/API/Web_Workers_API