Process VS Thread - ehrldyd15/Swift_Skills GitHub Wiki

Process VS Thread

ν”„λ‘œμ„ΈμŠ€(Process) vs μ“°λ ˆλ“œ(Thread)

1. ν”„λ‘œμ„ΈμŠ€(Process)와 λ©€ν‹° ν”„λ‘œμ„ΈμŠ€(Multi Process)

1) ν”„λ‘œμ„ΈμŠ€(Process)

μš΄μ˜μ²΄μ œλ‘œλΆ€ν„° μ‹œμŠ€ν…œ μžμ›μ„ ν• λ‹Ήλ°›λŠ” μž‘μ—…μ˜ λ‹¨μœ„λ‘œ μ •μ˜λœλ‹€.

스크란샷 2022-09-28 α„‹α…©α„Œα…₯ᆫ 11 03 50

각각의 λ…λ¦½λœ λ©”λͺ¨λ¦¬ μ˜μ—­ (Code, Data, Stack, Heap)을 각자 ν• λ‹Ή λ°›λŠ”λ‹€.

λ”°λΌμ„œ ν”„λ‘œμ„ΈμŠ€λΌλ¦¬λŠ” μ„œλ‘œμ˜ λ³€μˆ˜λ‚˜ μžλ£Œκ΅¬μ‘°μ— λŒ€ν•΄ μ ˆλŒ€ μ ‘κ·Όν•  수 μ—†λ‹€.

λ§Œμ•½, A ν”„λ‘œμ„ΈμŠ€κ°€ B ν”„λ‘œμ„ΈμŠ€ μžμ› μ ‘κ·Όν•˜λ €κ³  ν•˜λ©΄,

ν”„λ‘œμ„ΈμŠ€κ°„ 톡신(IPC)λ₯Ό μ‚¬μš©ν•΄μ•Ό 함(파일, μ†ŒμΌ“ λ“±)

2) λ©€ν‹° ν”„λ‘œμ„ΈμŠ€(Multi Process)

스크란샷 2022-09-28 α„‹α…©α„Œα…₯ᆫ 11 07 17

ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨μ„ μ—¬λŸ¬ 개의 ν”„λ‘œμ„ΈμŠ€λ‘œ κ΅¬μ„±ν•˜μ—¬, 각 ν”„λ‘œμ„ΈμŠ€λ§ˆλ‹€ ν•˜λ‚˜μ˜ μž‘μ—…(Task)μ”© μ²˜λ¦¬ν•˜λ„λ‘ ν•˜λŠ” κ²ƒμœΌλ‘œ μ •μ˜λœλ‹€.

예λ₯Ό λ“€μ–΄,

μ•ŒλžŒ μ–΄ν”Œμ„ μ‚¬μš©ν•œλ‹€κ³  ν–ˆμ„ λ•Œ

μ•ŒλžŒ μ‹œκ°„ μ‘°μ • λ™μž‘μ„ κ΅¬ν˜„ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€

μ•ŒλžŒ μ‹œκ°„μ΄ μšΈλ¦¬κΈ°κΉŒμ§€ κ³„μ‚°ν•˜λŠ” ν”„λ‘œμ„ΈμŠ€

μ•ŒλžŒμ΄ μšΈλ¦¬λŠ” ν”„λ‘œμ„ΈμŠ€

μ΄λ ‡κ²Œ ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨μ—μ„œ μΌμ–΄λ‚˜λŠ” μ—¬λŸ¬κ°œμ˜ μž‘μ—…μ„ ν”„λ‘œμ„ΈμŠ€λ₯Ό μ—¬λŸ¬ 개 μƒμ„±ν•˜μ—¬ 각자 ν•˜λ‚˜μ”© μ²˜λ¦¬ν•˜λ„λ‘ ν•΄μ£ΌλŠ” 것이닀.

μž₯점

λ…λ¦½λœ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ 각자 ν• λ‹Ή λ°›κΈ° λ•Œλ¬Έμ— ν”„λ‘œμ„ΈμŠ€ κ°„ μ„œλ‘œμ˜ μžμ›μ΄ μΉ¨νˆ¬ν•  수 μ—†λ‹€.

λ”°λΌμ„œ λ…λ¦½λœ ꡬ쑰이기 λ•Œλ¬Έμ— μ•ˆμ „μ„±μ΄ λ†’λ‹€.

단점

μ•ŒλžŒμ„ 1초 ν›„λ‘œ λ§žμΆ”λ©΄ λ“±λ‘ν•˜μžλ§ˆμž λ™μ‹œμ— μ•ŒλžŒμ΄ μšΈλ €μ„œ 각각의 ν”„λ‘œμ„ΈμŠ€λ“€μ΄ λ™μ‹œμ— μ§„ν–‰λ˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄μ§€λ§Œ

μ‹€μ œλ‘œ CPUλŠ” μœ„ ν”„λ‘œμ„ΈμŠ€λ“€μ„ λΉ λ₯΄κ²Œ μ™”λ‹€ κ°”λ‹€ ν•˜λ©° μ‹€ν–‰ν•˜κ³  μžˆλŠ” 것이닀.

λ”°λΌμ„œ, κ·Έ κ³Όμ •μ—μ„œ

Aν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹€ν–‰ν•  땐 Aν”„λ‘œμ„ΈμŠ€μ˜ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ 올리고,

Bν”„λ‘œμ„ΈμŠ€λ₯Ό μ‹€ν–‰ν•  땐 Bν”„λ‘œμ„ΈμŠ€μ˜ λ©”λͺ¨λ¦¬ μ˜μ—­μ„ 올리고

이런 μž‘μ—…λ“€μ„ Context Switching이라고 ν•˜λŠ”λ°,

ν”„λ‘œμ„ΈμŠ€λŠ” λ©”λͺ¨λ¦¬κ°€ λͺ¨λ‘ λ…λ¦½μ μœΌλ‘œ μ‘΄μž¬ν•˜κΈ° λ•Œλ¬Έμ—, Context Switching μ‹œ CPU의 뢀담도 컀지고 μ˜€λ²„ν—€λ“œκ°€ λ°œμƒν•˜κ²Œ λœλ‹€λŠ” 것이닀.

λ˜ν•œ, ν”„λ‘œμ„ΈμŠ€ κ°„ μžμ› κ³΅μœ κ°€ μ–΄λ ΅λ‹€λŠ” 점도 또 ν•˜λ‚˜μ˜ 단점이닀.

2. μ“°λ ˆλ“œ(Thread)와 λ©€ν‹° μ“°λ ˆλ“œ(Multi Thread)

1) μ“°λ ˆλ“œ(Thread)

ν•œ ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ λ™μž‘λ˜λŠ” μ—¬λŸ¬ μ‹€ν–‰μ˜ νλ¦„μœΌλ‘œ μ •μ˜λœλ‹€.

μ“°λ ˆλ“œλŠ” ν”„λ‘œμ„ΈμŠ€κ°€ μ•„λ‹Œ, ν”„λ‘œμ„ΈμŠ€ λ‚΄μ—μ„œ λ™μž‘λ˜λŠ” 것이기 떄문에 λ©”λͺ¨λ¦¬ μ˜μ—­μ„ λ…λ¦½μ μœΌλ‘œ ν• λ‹Ήλ°›μ§€ λͺ»ν•œλ‹€.

스크란샷 2022-09-28 α„‹α…©α„Œα…₯ᆫ 11 38 00

μœ„μ™€ 같이 Code, Data, Heap μ˜μ—­μ€ κ³΅μœ ν•˜κ³  Stack μ˜μ—­λ§Œ λ…λ¦½μ μœΌλ‘œ 할당받을 수 μžˆλ‹€.

Stack μ˜μ—­λ§Œ λ³„λ„λ‘œ κ°€μ§€λŠ” μ΄μœ λŠ”

Stack μ˜μ—­μ΄ LIFOλΌμ„œ Stack이 μŒ“μ΄λ©΄ ν”„λ‘œμ„ΈμŠ€κ°€ μ„žμΈ μ±„λ‘œ μˆœμ„œλŒ€λ‘œ λ‚˜μ™€ 흐름에 λ°©ν•΄κ°€ 되기 λ•Œλ¬Έμ΄λ‹€.

λ”°λΌμ„œ, μ“°λ ˆλ“œ λΌλ¦¬λŠ” νž™ μ˜μ—­μ„ κ³΅μœ ν•˜μ—¬ 같은 μžμ›μ— μ ‘κ·Όν•  수 μžˆμ§€λ§Œ

각자의 μŠ€νƒ μ˜μ—­μ€ μ„œλ‘œ 접근이 λΆˆκ°€λŠ₯ν•˜λ‹€.

2) λ©€ν‹° μ“°λ ˆλ“œ(Multi Thread)

스크란샷 2022-09-28 α„‹α…©α„Œα…₯ᆫ 11 40 30

ν•˜λ‚˜μ˜ ν”„λ‘œκ·Έλž¨μ„ μ—¬λŸ¬ 개의 μ“°λ ˆλ“œλ‘œ κ΅¬μ„±ν•˜μ—¬, 각 μ“°λ ˆλ“œλ§ˆλ‹€ ν•˜λ‚˜μ˜ μž‘μ—…(Task)μ”© μ²˜λ¦¬ν•˜λ„λ‘ ν•˜λŠ” κ²ƒμœΌλ‘œ μ •μ˜λœλ‹€.

μœˆλ„μš°, λ¦¬λˆ…μŠ€ λ“± λ§Žμ€ μš΄μ˜μ²΄μ œκ°€ λ©€ν‹° ν”„λ‘œμ„Έμ‹±μ„ μ§€μ›ν•˜μ§€λ§Œ, 이 λ©€ν‹° μ“°λ ˆλ“œλ₯Ό 기본으둜 ν•˜κ³  μžˆλ‹€.

μž₯점

  • μ“°λ ˆλ“œ κ°„ Code, Data, Heap μ˜μ—­μ„ κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ—, Context Switching이 λΉ λ₯΄λ‹€.

  • ν”„λ‘œμ„ΈμŠ€λ₯Ό μƒμ„±ν•˜μ—¬ μžμ›μ„ ν• λ‹Ήν•˜λŠ” 것이 μ•„λ‹ˆκΈ° λ•Œλ¬Έμ—, 생성/μ’…λ£Œ μ‹œκ°„λ„ ν”„λ‘œμ„ΈμŠ€λ³΄λ‹€ λΉ λ₯΄λ‹€.

  • ν”„λ‘œμ„ΈμŠ€ κ°„ 톡신이 κΉŒλ‹€λ‘œμš΄ λ°˜λ©΄μ—, μ“°λ ˆλ“œλ“€μ€ stack μ˜μ—­μ„ μ œμ™Έν•˜κ³  λ‚˜λ¨Έμ§€ μ˜μ—­μ„ κ³΅μœ ν•˜κΈ° λ•Œλ¬Έμ— 톡신 방법이 훨씬 κ°„λ‹¨ν•˜λ‹€.

단점

  • Stackμ˜μ—­ λΉΌκ³  곡유λ₯Ό ν•˜κΈ° λ•Œλ¬Έμ—, Aμ“°λ ˆλ“œκ°€ μ ‘κ·Όν•˜λ €λŠ” νž™ μ˜μ—­μ˜ μžμ›μ„ Bκ°€ κ°‘μžκΈ° μ ‘κ·Όν•΄μ„œ λ°”κΏ”λ²„λ¦¬λŠ” λ“±μ˜ κΉŒλ‹€λ‘œμ›€μ΄ μ‘΄μž¬ν•œλ‹€.

  • μžμ› 곡유의 λ¬Έμ œκ°€ 생긴닀.(동기화 문제)

  • 독립적이지 μ•Šμ•„, ν•˜λ‚˜μ˜ μ“°λ ˆλ“œμ—μ„œ λ¬Έμ œκ°€ λ°œμƒ μ‹œ 전체 μ“°λ ˆλ“œκ°€ 영ν–₯을 λ°›λŠ”λ‹€.

정리

스크란샷 2022-09-28 α„‹α…©α„Œα…₯ᆫ 11 47 40

참고 자료

https://babbab2.tistory.com/63?category=831129