sync/async

μ „ ν¬μŠ€νŒ…μ—μ„œ Blockingκ³Ό Non-Blocking을 λ‹€λ€˜μ—ˆλŠ”λ° μ΄λ²ˆμ—” λΉ„μŠ·ν•΄ λ³΄μ΄λŠ” κ°œλ…μΈ sync / async에 λŒ€ν•΄μ„œ ν¬μŠ€νŒ… ν•˜λ € ν•œλ‹€.

1. sync

Synchronous의 μ•½μžλ‘œ "동기"λΌλŠ” λœ»μ΄λ‹€. 즉 λ‹€μ‹œλ§ν•΄ μš”μ²­μ„ λ³΄λ‚΄κ²Œ 되면 μš”μ²­μ— λŒ€ν•œ 응닡을 λ°›μ„λ•ŒκΉŒμ§€ λŒ€κΈ°ν•˜μ˜€λ‹€κ°€ 응닡을 λ°›λŠ”λ‹€λŠ” 말이닀. (μš”μ²­ν•œ 객체가 응닡을 직접 λ°›λŠ”λ‹€)

쑰금 더 μ •ν™•ν•˜κ²Œ λ§ν•˜λ©΄ νŠΉμ • μž‘μ—…μ„ μˆ˜ν–‰ν• λ•Œ, κ·Έ μž‘μ—…μ˜ μ™„λ£Œ μ—¬λΆ€λ₯Ό μ‹ κ²½μ“°λŠ” 것을 λ§ν•œλ‹€.

κ·Έλ ‡κΈ° λ•Œλ¬Έμ— 동기식 μ²˜λ¦¬λŠ” μž‘μ—…μ„ λ™μ‹œμ— μˆ˜ν–‰ν•˜κ±°λ‚˜, λ™μ‹œμ— λλ‚˜κ±°λ‚˜, 이전 μž‘μ—…μ΄ λλ‚˜λŠ” λ™μ‹œμ— μ‹œμž‘ν•œλ‹€.

κ°„λ‹¨ν•œ μ˜ˆμ‹œλ‘œ A ν•¨μˆ˜κ°€ B ν•¨μˆ˜μ—κ²Œ μž‘μ—…μ„ μš”μ²­ν–ˆλ‹€λ©΄, A ν•¨μˆ˜λŠ” B ν•¨μˆ˜κ°€ μž‘μ—…μ΄ λλ‚˜κ³  응닡을 λ³΄λ‚΄λŠ” 것을 κΈ°λ‹€λ¦° ν›„ λ‹€μŒ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€λŠ” 것이닀.

2. async

그에 λ°˜ν•΄ sync의 λ°˜λŒ€ μš©μ–΄μΈ asyncλŠ” λΉ„λ™κΈ°λΌλŠ” 뜻으둜, μš”μ²­μ— λŒ€ν•œ 응닡을 기닀리지 μ•Šκ³  λ‹€λ₯Έ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€.

λ”°λΌμ„œ, 동기식 μ²˜λ¦¬μ™€ 달리 μš”μ²­ν•œ 객체가 응닡을 직접 λ°›μ§€ μ•Šκ³  μ½œλ°±ν•¨μˆ˜μ˜ ν˜•νƒœλ‘œ λ°›λŠ”λ‹€. λ˜ν•œ, μž‘μ—…μ˜ μ‹œμž‘κ³Ό μ’…λ£Œκ°€ 동기와 달리 μΌμ •ν•˜μ§€ μ•Šλ‹€.

A ν•¨μˆ˜κ°€ B ν•¨μˆ˜μ—κ²Œ μž‘μ—…μ„ μš”μ²­ν–ˆλ‹€λ©΄, A ν•¨μˆ˜λŠ” B ν•¨μˆ˜κ°€ 응닡을 λ³΄λ‚΄λŠ” 것을 기닀리지 μ•Šκ³  λ‹€λ₯Έ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€. μˆ˜ν–‰ 쀑, B ν•¨μˆ˜κ°€ 응닡을 보낸닀면, μ½œλ°±ν•¨μˆ˜μ˜ ν˜•νƒœλ‘œ λ°›μ•„μ˜¨λ‹€

3. Blocking / Non-Blocking과 차이

이 포슀트의 핡심이닀. 사싀 λ‚˜λ„ 이 κ²Œμ‹œκΈ€μ„ μ“°κΈ° μ „κΉŒμ§€λŠ” μ •ν™•ν•œ 차이λ₯Ό λͺ°λžλ‹€. λ¨Όμ € κ°„λ‹¨ν•˜κ²Œ Blocking / Non-Blockingκ³Ό sync/asyncλ₯Ό μ •λ¦¬ν•˜μž.

  • λ°‘μ˜ κΈ€ λΆ€ν„° νŽΈμ˜μƒ ν˜ΈμΆœν•œ ν•¨μˆ˜λŠ” A, 호좜된 ν•¨μˆ˜λŠ” B라고 μΉ­ν•˜κ² μŠ΅λ‹ˆλ‹€.

3 - 1. Blocking / Non - Blocking

-
Blocking
Non-Blocking

ꡬ뢄 κΈ°μ€€

μž‘μ—…μ‹œ Bκ°€ μ™„λ£ŒκΉŒμ§€ μ œμ–΄κΆŒ O

BλŠ” μ œμ–΄κΆŒ X

Blockingκ³Ό Non-Blocking의 ꡬ뢄 기쀀은 호좜된 ν•¨μˆ˜κ°€ μ œμ–΄κΆŒμ„ μ†Œμœ ν•˜κ³  μžˆλŠλƒ, λ°”λ‘œ ν˜ΈμΆœν•œ ν•¨μˆ˜μ—κ²Œ λŒλ €μ£ΌλŠλƒ 이닀.

Blocking의 경우 Bμ—κ²Œ μ œμ–΄κΆŒμ΄ μžˆκΈ°μ— AλŠ” B의 μž‘μ—… μ™„λ£Œμ‹œκΉŒμ§€ λ‹€λ₯Έ μž‘μ—…μ„ μˆ˜ν–‰ν•˜μ§€ λͺ»ν•˜κ³  κΈ°λ‹€λ¦°λ‹€.

**πŸ‘¨πŸ»β€πŸ’» (A) : κ³Όμž₯λ‹˜ 업무 μ„œλ₯˜ 처리 λΆ€νƒλ“œλ¦½λ‹ˆλ‹€. ** πŸ‘¨πŸ»β€πŸ’Ό (B) : μ„œλ₯˜ μ§€κΈˆ μ²˜λ¦¬ν•΄μ„œ λ“œλ¦΄ν…Œλ‹ˆκΉŒ μ—¬κΈ°μ„œ μž μ‹œ κΈ°λ‹€λ¦¬μ„Έμš”.

  • μ—…λ¬΄μ˜ μ œμ–΄κΆŒμ€ κ³Όμž₯ Bμ—κ²Œ μžˆλ‹€. 사원 AλŠ” κ³Όμž₯ B의 μ„œλ₯˜ 처리 μ „κΉŒμ§€ 타 업무 X

λ°˜λŒ€λ‘œ Non - Blocking의 경우, μ œμ–΄κΆŒμ΄ Aμ—κ²Œ λ‹€μ‹œ λ˜λŒμ•„ 가기에 AλŠ” B의 μž‘μ—…μ™„λ£Œλ₯Ό 기닀리지 μ•Šκ³  λ‹€λ₯Έ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€.

**πŸ‘¨πŸ»β€πŸ’» (A) : κ³Όμž₯λ‹˜ 업무 μ„œλ₯˜ 처리 λΆ€νƒλ“œλ¦½λ‹ˆλ‹€. ** πŸ‘¨πŸ»β€πŸ’Ό (B) : μ œκ°€ μ„œλ₯˜ μ²˜λ¦¬ν•΄μ„œ κ°–λ‹€ λ“œλ¦΄ν…Œλ‹ˆ μžλ¦¬κ°€μ„œ λ‹€λ₯Έ 업무 보고 κ³„μ„Έμš”.

  • μœ„μ™€ 달리 μ—…λ¬΄μ˜ μ œμ–΄κΆŒμ„ 사원 Aμ—κ²Œ λ„˜κ²¨μ£Όμ–΄ κ³Όμž₯ Bκ°€ μ„œλ₯˜ 처리 쀑에도 사원 AλŠ” λ‹€λ₯Έ 업무가 κ°€λŠ₯ν•˜λ‹€.

3 - 2. sync / async

-
sync
async

ꡬ뢄 κΈ°μ€€

μž‘μ—…λ“€μ΄ μ‹œκ°„μ„ λ§žμΆ”μ–΄ μ‹€ν–‰

μž‘μ—…λ“€μ΄ μ‹œκ°„μ„ λ§žμΆ”μ§€ μ•Šκ³  μ‹€ν–‰

μ—¬κΈ°μ„œ λ§ν•˜λŠ” μ‹œκ°„μ„ λ§žμΆ”μ–΄ μ‹€ν–‰λœλ‹€λŠ” 것은 μœ„μ—μ„œ λ§ν–ˆλ˜ μž‘μ—…λ“€μ΄ λ™μ‹œμ— μ‹œμž‘ν•˜κ±°λ‚˜, λ™μ‹œμ— λλ‚˜κ±°λ‚˜, 끝과 λ™μ‹œμ— μ‹œμž‘λ˜λŠ” 것을 λ§ν•œλ‹€.

sync의 경우, B의 μž‘μ—… κ²°κ³Όλ₯Ό 응닡받아 Aκ°€ μ²˜λ¦¬ν•œλ‹€. λ”°λΌμ„œ μž‘μ—…μ˜ μ’…λ£Œ/μ‹œμž‘μ‹œκ°„μ΄ μΌμΉ˜ν•œλ‹€.

**πŸ‘¨πŸ»β€πŸ’» (A) : κ³Όμž₯λ‹˜ 업무 μ„œλ₯˜ 처리 λΆ€νƒλ“œλ¦½λ‹ˆλ‹€. ** πŸ‘¨πŸ»β€πŸ’Ό (B) : μ—¬κΈ° μ„œλ₯˜ μ²˜λ¦¬νŒŒμΌμž…λ‹ˆλ‹€. λ°”λ‘œ μ„œλ₯˜μ²˜λ¦¬ 파일 μΈμ‚¬λΆ€μ„œμ— λ©”μΌλ‘œ λ³΄λ‚΄μ£Όμ„Έμš” **πŸ‘¨πŸ»β€πŸ’» (A) : λ„€ μ§€κΈˆ λ°”λ‘œ λ³΄λ‚΄κ² μŠ΅λ‹ˆλ‹€. **

  • Aκ°€ Bμ—κ²Œ μš”μ²­ν•œ μ„œλ₯˜μ²˜λ¦¬λΌλŠ” 업무가 μ’…λ£Œλ¨κ³Ό λ™μ‹œμ— 메일 λ³΄λ‚΄κΈ°λΌλŠ” 업무가 μ‹œμž‘λœλ‹€. 즉 μ‹œκ°„μ„ λ§žμΆ”μ–΄ μ‹€ν–‰λœλ‹€.

λ°˜λŒ€λ‘œ, async의 경우 A와 Bκ°€ μž‘μ—…μ˜ μ‹œμž‘κ³Ό μ’…λ£Œμ‹œκ°„μ„ μ „ν˜€ μ‹ κ²½μ“°μ§€ μ•ŠλŠ”λ‹€. BλŠ” κ·Έμ € μš”μ²­λ°›μ€ μž‘μ—…μ΄ μ™„λ£Œλ˜λ©΄ μ½œλ°±ν•¨μˆ˜λ‘œμ¨ μ‘λ‹΅ν•œλ‹€.

**πŸ‘¨πŸ»β€πŸ’» (A) : κ³Όμž₯λ‹˜ 업무 μ„œλ₯˜ 처리 λΆ€νƒλ“œλ¦½λ‹ˆλ‹€. ** πŸ‘¨πŸ»β€πŸ’Ό (B) : 음 μ œκ°€ μ•Œμ•„μ„œ μ„œλ₯˜ μ²˜λ¦¬ν•΄μ„œ λ³΄λ‚΄λ“œλ¦΄κ²Œμš”. κ·Έλ™μ•ˆ 뭐 λ‹€λ₯Έ 업무 ν•˜μ‹œλ˜μ§€ ν•˜κ³  κ³„μ„Έμš” ...B의 μ„œλ₯˜ μ²˜λ¦¬μ€‘... πŸ‘¨πŸ»β€πŸ’Ό (B) : μ—¬κΈ° μ„œλ₯˜ μ²˜λ¦¬ν•œκ±° λ“œλ¦΄κ²Œμš” **πŸ‘¨πŸ»β€πŸ’» (A) : λ„€ μ²˜λ¦¬ν•˜μ‹ κ±° 제 책상에 λ‘μ‹œλ©΄ μ œκ°€ ν•˜λ˜ 업무듀 마치고 μ•Œμ•„μ„œ μ²˜λ¦¬ν•˜κ² μŠ΅λ‹ˆλ‹€. **

  • AλŠ” Bμ—κ²Œ μš”μ²­ν•œ μ„œλ₯˜μ²˜λ¦¬λΌλŠ” μ—…λ¬΄μ˜ μ’…λ£Œμ‹œκ°„μ„ μ‹ κ²½μ“°μ§€ μ•Šκ³  λ‹€λ₯Έ 업무λ₯Ό μ§„ν–‰ν•œλ‹€. B λ˜ν•œ A의 업무 진행을 μ‹ κ²½μ“°μ§€ μ•Šκ³  μš”μ²­λ°›μ€ 업무λ₯Ό μˆ˜ν–‰ν•œλ‹€.

4. 4 κ°œλ…μ˜ 혼용

κ΅¬λΆ„ν‘œ

λ”°λΌμ„œ Blocking / Non - Blockingκ³Ό sync / async 4개의 κ°œλ…μ€ ν˜Όμš©λ˜μ–΄ μ‚¬μš© 될 수 μžˆλ‹€

4 - 1. Blocking - sync (동기 ν•¨μˆ˜)

일반적인 동기 ν•¨μˆ˜μ˜ μž‘λ™ 방식이닀.

Blocking의 νŠΉμ„±μΈ μ œμ–΄κΆŒμ΄ 호좜된 ν•¨μˆ˜ Bμ—κ²Œ 있고, sync의 νŠΉμ„±μΈ μž‘μ—…μ²˜λ¦¬ μ‹œκ°„μ„ λ§žμΆ°μ•Ό ν•œλ‹€λŠ”κ²ƒμ΄ κ²°ν•©λœ 것이닀.

즉, Aκ°€ Bμ—κ²Œ μž‘μ—…μ„ μš”μ²­ν•˜κ³ , μž‘μ—… μ œμ–΄κΆŒμ€ Bμ—κ²Œ μžˆκΈ°μ— AλŠ” B의 μž‘μ—… μ™„λ£Œ μ „κΉŒμ§€ λ‹€λ₯Έ μž‘μ—…μ„ μˆ˜ν–‰ν•˜μ§€ λͺ»ν•œλ‹€. B의 μž‘μ—…μ΄ μ™„λ£Œλ˜λ©΄ Aμ—κ²Œ λ‹€μ‹œ μ œμ–΄κΆŒμ΄ λ„˜μ–΄κ°€ λ‹€λ₯Έ μž‘μ—…μ„ μˆ˜ν–‰ν•œλ‹€ (μž‘μ—…μ²˜λ¦¬ μ‹œκ°„ 맞좀 O)

4 - 2 . Blocking - async

비동기 λΈ”λ‘œν‚Ή μ²˜λ¦¬λŠ” 비동기이기 λ•Œλ¬Έμ— μž‘μ—… 처리 μ‹œκ°„μ€ 상관이 μ—†λ‹€.

ν•˜μ§€λ§Œ Blocking의 νŠΉμ„±μœΌλ‘œ μ œμ–΄κΆŒμ΄ μš”μ²­λ°›μ€ Bμ—κ²Œ μžˆκΈ°μ— μš”μ²­ν•œ AλŠ” B의 μž‘μ—…μ΄ λλ‚ λ•ŒκΉŒμ§€ λŒ€κΈ°ν•˜κ²Œ λœλ‹€.

Blocking - sync와 λΉ„μŠ·ν•˜μ§€λ§Œ B의 μž‘μ—…κ²°κ³Όκ°€ μ½œλ°±ν•¨μˆ˜λ‘œ μ²˜λ¦¬λœλ‹€λŠ” 차이점이 μžˆκΈ΄ν•œλ‹€.

4 - 3 . Non - Blocking - sync

λ™κΈ°μ μœΌλ‘œ μ‹€ν–‰λ˜κΈ°μ— μž‘μ—…μ²˜λ¦¬μ‹œκ°„μ€ μΌμΉ˜ν•΄μ•Όν•œλ‹€. ν•˜μ§€λ§Œ Non - Blocking의 νŠΉμ„±μœΌλ‘œ μ œμ–΄κΆŒμ€ ν˜ΈμΆœν•œ Aμ—κ²Œ λ‹€μ‹œ λŒμ•„μ˜¨λ‹€.

μ—¬κΈ°μ„œ νŠΉμ§•μ€ μž‘μ—…μ²˜λ¦¬μ‹œκ°„μ΄ μΌμΉ˜ν•΄μ•Ό ν•˜κΈ° λ•Œλ¬Έμ— μ œμ–΄κΆŒμ΄ Aμ—κ²Œ μžˆμ–΄ λ‹€λ₯Έ μž‘μ—…μ„ μˆ˜ν–‰ν• μˆ˜ μžˆμŒμ—λ„ λΆˆκ΅¬ν•˜κ³  B의 μž‘μ—…μ™„λ£Œ μ—¬λΆ€λ₯Ό κ³„μ†ν•΄μ„œ ν™•μΈν•œλ‹€λŠ” 점이닀.

4 - 4 . Non - Blocking - async (비동기 ν•¨μˆ˜)

일반적인 비동기 ν•¨μˆ˜μ˜ μž‘λ™ 방식이닀. λΉ„λ™κΈ°μ μœΌλ‘œ μ‹€ν–‰λ˜κΈ°μ— μž‘μ—…μ²˜λ¦¬μ‹œκ°„μ΄ 일치 ν•˜μ§€ μ•Šμ•„λ„ 되고, Non - Blocking이기에 μž‘μ—…μ˜ μ œμ–΄κΆŒ λ˜ν•œ Aμ—κ²Œ λ‹€μ‹œ λŒμ•„μ™€ λ‹€λ₯Έ μž‘μ—…μ„ μˆ˜ν–‰ ν•  수 μžˆλ‹€.

즉, AλŠ” Bμ—κ²Œ μž‘μ—… μš”μ²­ ν›„ μ œμ–΄κΆŒμ„ λ‹€μ‹œ λŒλ €λ°›κΈ°μ— B의 μž‘μ—… 결과에 상관없이 λ°”λ‘œ λ‹€λ₯Έ μž‘μ—…μ„ ν•  수 μžˆλ‹€. BλŠ” μž‘μ—…μ„ μˆ˜ν–‰ν•˜κ³  κ·Έ κ²°κ³Όλ₯Ό μ½œλ°±ν•¨μˆ˜λ‘œ λ°˜ν™˜ν•œλ‹€.

5. μš”μ•½

5 - 1 . Blocking / Non-Blocking

Blocking / Non - Blocking의 핡심은 ν•œ μž‘μ—…μ„ μ²˜λ¦¬ν•˜λŠ” λ™μ•ˆ λ‹€λ₯Έ μž‘μ—…μ„ μ²˜λ¦¬ν• μˆ˜ μžˆλŠλƒ μ—†λŠλƒ 이닀.

"μž‘μ—…μ²˜λ¦¬μ˜ μ œμ–΄κΆŒμ΄ λˆ„κ΅¬μ—κ²Œ μžˆλŠ”κ°€? λ”°λΌμ„œ A와 B의 λ™μ‹œμž‘μ—…μ΄ κ°€λŠ₯ν•œκ°€?"

5 - 2. Sync / Async

sync / async의 핡심은 μž‘μ—…μ΄ μ‹œκ°„μ„ λ§žμΆ”μ–΄ μ‹€ν–‰λ˜λŠ” 것이닀.

μš”μ²­ν•œ(받은)μž‘μ—…μ²˜λ¦¬κ°€ μ‹œκ°„μ„ λ§žμΆ”μ–΄ μ§„ν–‰λ˜λŠ”κ°€?

  • μ‹œκ°„μ„ λ§žμΆ˜λ‹€ : μž‘μ—…λ“€μ΄ λ™μ‹œμ— μ‹œμž‘ν•˜κ±°λ‚˜, λ™μ‹œμ— λλ‚˜κ±°λ‚˜, 끝과 λ™μ‹œμ— μ‹œμž‘λ˜λŠ” 것

Last updated