λκ΅°κ° μ μκ² νλ‘μΈμ€μ μ€λ λμ μ°¨μ΄μ μ λν΄ λ¬Όμλ μ μ΄ μμλλ°, λͺ ννκ² λλ΅μ λͺ»νκ² λ무 μμ¬μμ μ΄ μ°Έμ νμ€ν 곡λΆνκ³ λμ΄κ°λ € μ΄ κΈμ μ°κ² λμμ΅λλ€.
κ°λ λ€μ΄ νκ³ νκ³ λ€λ©΄ λ°λ λλ μλ κ² κ°μμ μ΄ κΈμ μ΄ν΄νλλ° μμ΄ κ΅³μ΄ λΆνμν κ°λ λ€μ λν΄μ μΈκΈνμ§ μκ² μ΅λλ€.
νλ‘μΈμ€μ μ€λ λλ 무μμΌκΉ?
#νλ‘μΈμ€(Process)λ?
νλ‘μΈμ€κ° 무μμΈμ§ νμ νκΈ° μ μ νλ‘κ·Έλ¨μ΄λ 무μμΈμ§ νμ ν νμκ° μμ΅λλ€. νλ‘κ·Έλ¨μ΄λ λ¨μ΄λ μ»΄ν¨ν°μ 곡μκ° μλμ¬λ λλΆλΆμ μ¬λλ€μ΄ λ§μ΄ λ€μ΄λ΄€μ κ²μ΄κ³ μ€μ λ‘ μ¬μ©λ νλ λ¨μ΄μΌ κ²μ λλ€.
νλ‘κ·Έλ¨ μ μ΄λ€ μμ μ μ€νν μ μλ νμΌμ μλ―Έν©λλ€. λ°ννλ©΄μ LoL.exe , Visual Studio.exe κ°μ νμΌλ€μ΄ μλλ° μ΄κ²λ€μ΄ νλ‘κ·Έλ¨μ λλ€. λλΈν΄λ¦νμμ λ μ°λ¦¬λ νλ‘κ·Έλ¨μ μ€ννλ€κ³ ν©λλ€.
νλ‘μΈμ€ λ μ»΄ν¨ν°μμ μ°μμ μΌλ‘ μ€νλκ³ μλ μ»΄ν¨ν° νλ‘κ·Έλ¨μ μ§μΉν©λλ€. μ’ λ μ½κ² μκΈ°νμλ©΄ μ΄λ ν νλ‘κ·Έλ¨μ μ€νμν€κΈ° μν 주체(μΈμ€ν΄μ€)μ λλ€. νλ‘κ·Έλ¨μ νλμ§λ§ μ΄λ₯Ό μ€νμν¬ μ μλ 주체(νλ‘μΈμ€)λ μ¬λ¬ κ°κ° λ μ μμ΄μ νλμ νλ‘κ·Έλ¨μ μ¬λ¬ λ² μ€νμν€λ©΄ μ¬λ¬ κ°μ νλ‘μΈμ€λ₯Ό μμ±μν¬ μ μμ΅λλ€.
μ μ¬μ§μ νλμ νλ‘κ·Έλ¨(visual studio.exe)λ₯Ό νλ²λ§ μ€νμν¨ κ²κ³Ό μΆκ°μ μΌλ‘ 2λ² λ μ€νν μ΄λ―Έμ§μ λλ€. νλ‘μΈμ€λ κ°κ°μ λ 립λ λ©λͺ¨λ¦¬ μμμ ν λΉ λ°κ² λλλ° μ μ΄λ―Έμ§μ²λΌ νλ² μ€νμμΌ°μ λλ³΄λ€ 3λ² μ€νμμΌ°μ λ λ©λͺ¨λ¦¬λ₯Ό λ μ°¨μ§ νλ λͺ¨μ΅μ λ³΄μ€ μ μμ΅λλ€. λΉμ°ν νλ‘μΈμ€ μκ° λ§μμ§λ§ μ»΄ν¨ν°μ κ³ΌλΆνκ° κ±Έλ € λλ €μ§λλ€.
νλ‘μΈμ€μ νΉμ§
- νλ‘μΈμ€λ κ°κ°μ λ 립λ λ©λͺ¨λ¦¬ μμ(Code, Data, Stack, Heapμ ꡬ쑰) μ ν λΉ λ°λλ€
- κΈ°λ³Έμ μΌλ‘ νλ‘μΈμ€ λΉ μ΅μ 1κ°μ μ€λ λλ₯Ό κ°μ§λ€
- κ° νλ‘μΈμ€λ λ³λμ μ£Όμ 곡κ°μμ μ€νλλ©°, λ€λ₯Έ νλ‘μΈμ€μ μ κ·Όμ΄ λΆκ°λ₯νλ€
- νμ§λ§ IPC(νλ‘μΈμ€κ° ν΅μ , Inter Process Communication) μ μ΄μ©νμ¬ λ€λ₯Έ νλ‘μΈμ€κ° μ κ·Όμ΄ κ°λ₯νλ€. λνμ μΌλ‘ μ±ν νλ‘κ·Έλ¨μ ꡬνν λ νμν Socketμ΄ μλ€
νμ€ μμ½ : νλ‘κ·Έλ¨μ μ½λ λ©μ΄λ¦¬ νμΌ, κ·Έλ¦¬κ³ κ·Έ νλ‘κ·Έλ¨μ μ€ννκ² ν κ²μ΄ νλ‘μΈμ€
#μ€λ λ(Thread)λ?
κ³Όκ±°μλ νλμ νλ‘μΈμ€λ§μ μ΄μ©νμ¬ νλ‘κ·Έλ¨μ μ€νμμΌ°λ€κ³ ν©λλ€. νμ§λ§ μκ°μ΄ νλ¬ νλ‘κ·Έλ¨μ΄ 볡μ‘ν΄μ§κ³ νλ‘μΈμ€ νλλ§μ μ¬μ©νμ¬ νλ‘κ·Έλ¨μ μ€ννκΈ°μλ λ§μ΄ λ² μ°¨μ‘μ΅λλ€. κ·Έλ¦¬κ³ νμ¬λ νλ‘κ·Έλ¨ νλκ° λ¨μν ν κ°μ§ μμ λ§μ νλ κ²½μ°λ μμ΅λλ€.
ν νλ‘κ·Έλ¨μ μ²λ¦¬νκΈ° μν νλ‘μΈμ€λ₯Ό μ¬λ¬ κ° λ§λ€λ©΄ λμ§ μμκΉ? λΌκ³ μκ°ν μλ μμ§λ§ μμμλ μΈκΈν λ°μ κ°μ΄ κΈ°λ³Έμ μΌλ‘ νλ‘μΈμ€κ° μ κ·Όμ΄ λΆκ°λ₯νκΈ° λλ¬Έμ μ¬λ¬ κ°μ νλ‘μΈμ€λ₯Ό μ΄μ©νμ¬ ν νλ‘κ·Έλ¨μ μ²λ¦¬νκΈ° μν κ²μ λΆκ°λ₯νμμ΅λλ€.
μ΄μ λ°λΌ νλ‘μΈμ€μ λ€λ₯΄κ² λ μμ μ€ν λ¨μ κ°λ μ΄ νμνκ² λμκ³ , μ΄κ²μ΄ λ°λ‘ μ€λ λ(Thread) μ λλ€.
μ¬λ΄μΌλ‘ κ·Έλ¦Όμμ μ€λ λκ° μ§λ μ΄μ²λΌ ννλλλ° μ€λ λκ° λ²μνλ©΄ 'μ€'μ΄μ¬μ μ§λ μ΄μ²λΌ ννλ©λλ€.
μ€λ λμ νΉμ§
- μ€λ λλ νλ‘μΈμ€μ νκ³λ₯Ό 극볡νκΈ° μν΄ λμ¨ κ²μ΄λ―λ‘ ν νλ‘μΈμ€ λ΄μ μλ μ¬λ¬ κ°μ μ€λ λλ 곡μ κ° κ°λ₯νλ€
- μ€λ λλ νλ‘μΈμ€ λ΄μμ κ°κ° stackλ§ ν λΉλ°κ³ , Heap μμμ μλ‘ κ³΅μ νλ€
- κ°μ νλ‘μΈμ€ λ΄μ μ€λ λλ κ°μ Heap μμμ 곡μ νλ λ°λ©΄μ λ€λ₯Έ νλ‘μΈμ€μ λ©λͺ¨λ¦¬μλ μ κ·Όμ΄ λΆκ°λ₯νλ€
νλ‘μΈμ€μ μ€λ λμ μ°¨μ΄
μμ μΈκΈν κ°λ μ ν λλ‘ νλ‘μΈμ€μ μ€λ λλ μμ°ν κ°λ λΆν° λ€λ₯΄λ€λ κ±Έ μ μ μμμ΅λλ€. OS μμ νλ‘μΈμ€κ° μ‘΄μ¬νκ³ νλ‘μΈμ€ λ΄μ μ€λ λκ° μ‘΄μ¬ν©λλ€.
μ£Όλͺ©ν μ μ νλ‘μΈμ€λ IPCμ κ°μ ν΅μ κΈ°λ²μ μ¬μ©νμ§ μλ μ΄μ νλ‘μΈμ€κ° μ κ·Όμ΄ λΆκ°λ₯ν λ°λ©΄μ, μ€λ λλ κΈ°λ³Έ κ΅¬μ‘°κ° stackμ μ μΈν λλ¨Έμ§ λ©λͺ¨λ¦¬ μμμ 곡μ νκ³ μμ΄ IPCμ κ°μ ν΅μ κΈ°λ²μ΄ μμ΄λ μμ λ‘κ² μ κ·Όμ΄ κ°λ₯ν©λλ€.
λ©ν°νλ‘μΈμ€μ λ©ν°μ€λ λλ₯Ό μ΄ν΄νλλ° μμ΄ Context-Switchingμ λλ΅μ μΈ μ€λͺ μ΄ νμν κ² κ°μ κ°λ¨νκ² μΈκΈνκ² μ΅λλ€.
* Context-Switching λ?
νμ¬ μ€νλκ³ μλ νλ‘μΈμ€λ μ€λ λμ μνλ₯Ό Registerμ μ μ₯νκ³ μλ‘μ΄ νλ‘μΈμ€λ μ€λ λλ₯Ό CPUμ μ μ¬νλ κ²μ λ§ν©λλ€.
OSλ μμ κ°μ μμ μ κ³μ λ°λ³΅νκ² λλλ° μ€λ λκ° μ μλ μκ΄ μμ§λ§ μ€λ λκ° λ§μμ§λ€λ©° λΉμ©μ΄ λΉμΈμ§κ³ , μλκ° κΈκ²©νκ² λλ €μ§λλ€.
λ©ν°νλ‘μΈμ€μ λ©ν°μ€λ λ
λ©ν°νλ‘μΈμ€ λ νλμ OS μμμ μ¬λ¬ νλ‘μΈμ€κ° μ€νλλ κ²μ΄κ³ , λ©ν°μ€λ λ λ νλμ νλ‘μΈμ€ λ΄μμ μ¬λ¬ μμ μ μ¬λ¬ μ€λ λλ₯Ό μ΄μ©νμ¬ μ²λ¦¬νλ κ²μ λ§ν©λλ€.
λ©ν°νλ‘μΈμ€μ μ₯λ¨μ μ λ©ν°μ€λ λμ μ₯λ¨μ κ³Ό λμ‘° λλλ° λ©ν°νλ‘μΈμ€λ³΄λ€λ λ©ν°μ€λ λλ₯Ό μ νΈν©λλ€. κ·Έλ° μ΄μ μ λν΄μλ μμμ μΈκΈν μ€λ λμ 'λ©λͺ¨λ¦¬μμ 곡μ ' λΌλ νΉμ§μ μκ°ν΄λ³΄λ©΄ μ½κ² μ μΆν μ μμ΅λλ€.
(κ΅μλμ΄ λ§νμκΈΈ νλ‘κ·Έλλ°μ μμ΄μ μ΄λ€ νμλ₯Ό νμ λ κ·Έκ²μ ν¨μΌλ‘μ¨ μ»λ μ΄μ μ λν΄ λ§ν΄λ³΄λΌ ν λ λͺ¨λ₯΄κ² μΌλ©΄ "μλκ° κ°μ λκ³ λ©λͺ¨λ¦¬ μ μ½μ΄ λλ€" λΌκ³ νλ©΄ κ±°μ λ€ λ§λ€κ³ νμ λ€.. κ·Όλ° μ§μ§ λ€ κ·Έλ λ€)
λ©ν°μ€λ λμ μ₯μ
- μ€λ λλΌλ¦¬ λ©λͺ¨λ¦¬λ₯Ό 곡μ νκ³ μκΈ° λλ¬Έμ Context-Switchingμ ν λ κ·Έ λ§νΌ λ©λͺ¨λ¦¬λ₯Ό μλμ μλ€
- λ©λͺ¨λ¦¬μμμ 곡μ νκ³ μκΈ° λλ¬Έμ μλ΅μκ°μ΄ λΉ λ₯΄λ€
- IPCμ κ°μ 볡μ‘ν ν΅μ κΈ°λ²μ΄ νμνμ§ μλ€
λ©ν°μ€λ λμ λ¨μ
- λ©λͺ¨λ¦¬μμμ 곡μ νκΈ° λλ¬Έμ νλμ μ€λ λκ° λ¬Έμ κ° λ°μνλ©΄ νλ‘κ·Έλ¨ μ 체μ μν₯μ μ€λ€
- λ©λͺ¨λ¦¬μμμ 곡μ νκΈ° λλ¬Έμ λκΈ°ν λ¬Έμ κ° λ°μν μ μλ€
- λκΈ°ν λ¬Έμ λ₯Ό λ°λμ ν΄κ²°ν΄μ£Όμ΄μΌ νλ€
- μ€κ³κ° μ΄λ ΅κ³ , λλ²κΉ μ΄ κΉλ€λ‘λ€
λ©ν°μ€λ λλ₯Ό μ¬μ©νκ² λλ©΄ μ¬λ¬ κ°μ μ€λ λλ€μ΄ μ΄λ€ μμλ‘ μ€νλλμ§ μ μκ° μμ΅λλ€. λ°λΌμ μ¬λ¬ μ°λ λκ° ν¨κ» μ μ λ³μμ κ°μ λ°μ΄ν°λ₯Ό κ°μ΄ μ¬μ©ν κ²½μ° μΆ©λμ΄ λ°μν μ μλλ° μ΄λ₯Ό λκΈ°ν λ¬Έμ λΌκ³ ν©λλ€. μ΄ νμμ λν΄μλ μ€μΌμ€λ§μ΄ μμμ ν΄μ£Όμ§ μκΈ° λλ¬Έμ κ°λ°μκ° μ§μ ꡬνμ ν΄μΌνλλ° μ΄ λΆλΆμ΄ μ½μ§κ° μμ΅λλ€.
λ©ν°νλ‘μ€μΈμ μ₯λ¨μ λ©ν°μ€λ λμ λ°λλ‘ μκ°νμλ©΄ λ©λλ€. 'λ©λͺ¨λ¦¬ μμμ 곡μ ' νλ€λ κ²μ΄ μ€λ λμκ² μμ΄ μλ μ κ²κ°μ μ‘΄μ¬μ΄μ§λ§ μ΄μ μ΄ λ λ§μΌλ λ©ν°νλ‘μΈμ€λ³΄λ€λ λ©ν°μ€λ λλ₯Ό μ νΈνκ³ μμ΅λλ€.
λ§ΊμΌλ©°..
νλ‘μΈμ€μ μ€λ λλ '곡μ ' κ°λ μ μκ°νλ©΄ μ½κ² μ΄ν΄ν μ μμ΅λλ€. κΈ°λ³Έμ μΌλ‘ νλ‘μΈμ€λ νλ‘μΈμ€κ° μ κ·Όμ΄ λΆκ°λ₯νμ§λ§ μ€λ λλ κ°μ νλ‘μΈμ€λ΄ μ‘΄μ¬νλ©΄ μ κ·Όμ΄ κ°λ₯ν©λλ€.
λ©λͺ¨λ¦¬ μμμ 곡μ νκΈ° λλ¬Έμ λ©λͺ¨λ¦¬λ₯Ό μλ μ μκ³ , μλ΅μκ°μ΄ λΉ λ¦ λλ€. νμ§λ§ λ λ©λͺ¨λ¦¬ μμμ 곡μ νκΈ° λλ¬Έμ λκΈ°νλ¬Έμ κ° λ°μνκ³ νλμ μ€λ λκ° νλ‘μΈμ€ μ 체μ μν₯μ μ€ μ μμ΅λλ€.
λ©ν°νλ‘μΈμ€λ³΄λ€ λ©ν°μ€λ λλ₯Ό μ νΈνλ€κ³ λ νμ§λ§ λμ μ°μμλ νμ°ν λ€λ₯΄λ―λ‘ μ΄λ₯Ό μ μ νκ² μλ§λ κ³³μ μ¬μ©νλ κ²μ΄ κ°μ₯ μ’μ κ² κ°μ΅λλ€.
λ€λ₯Έ νλ‘μΈμ€ λ΄ μ€λ λμ μ κ·Όν μ μλ λ°©λ²μ μλ μ§ μΆκ°λ‘ 곡λΆν΄μΌκ² μ΅λλ€.
μ½μ΄μ£Όμ μ κ°μ¬ν©λλ€.
Process, Thread Conference
- https://jhnyang.tistory.com/6
- https://gmlwjd9405.github.io/2018/09/14/process-vs-thread.html
- https://blog.naver.com/ahn128/221499378124
- https://12bme.tistory.com/65
- https://beenlife.tistory.com/114
- https://velog.io/@raejoonee/%ED%94%84%EB%A1%9C%EC%84%B8%EC%8A%A4%EC%99%80-%EC%8A%A4%EB%A0%88%EB%93%9C%EC%9D%98-%EC%B0%A8%EC%9D%B4
Context-Switching Conference
'...' μΉ΄ν κ³ λ¦¬μ λ€λ₯Έ κΈ
[CA] λ°μ΄λ리 νμΌκ³Ό λ°μ΄νΈ νμΌ κ·Έλ¦¬κ³ μ»΄νμΌ, λ§ν¬ (4) | 2021.05.10 |
---|---|
[JS]μλ°μ€ν¬λ¦½νΈ λμμ μΌμμΌμ²΄! - V8, Web API, Event Loop (7) | 2021.05.03 |
[Python] list(리μ€νΈ)μ μμ 볡μ¬μ κΉμ λ³΅μ¬ (0) | 2021.04.25 |
[Node.js] uuid λΌμ΄λΈλ¬λ¦¬ μ€μΉ λ° μ¬μ©νκΈ° (0) | 2021.04.12 |
Node.jsμ κ΄ν 10κ°μ§ νν - λΌμ΄μΈ λ¬κ³Ό Deno.js (8) | 2021.04.11 |