Blocking/Non-blocking๊ณผ Sync/Async๋ ๋น์ทํ๊ฒ ๋ณด์ด์ง๋ง, ๋ค๋ฅธ ๊ฐ๋ ์ด๋ค.
๊ต์ฅํ ํท๊ฐ๋ ค์,,!! ๋์ ์ ํํ ๊ตฌ๋ถํ์ฌ ์ ๋ฆฌํด๋ณด๋ คํ๋ค.
๐ ๊ฐ๋ ๋น๊ต
Sync/Async์ Blocking/Non-blocking์ ๋ชจ๋ ํ๋ก์ธ์ค๋ฅผ ์ด์ฉํ๊ธฐ ์ํ ๋ฐฉ๋ฒ์ด๋ค.
Sync/Async
"ํ๋ก์ธ์ค์ ์ํ ์์ ๋ณด์ฅ์ ๋ํ ๋งค์ปค๋์ฆ"
- Sync : ์์ฒญ์ด ๋ค์ด์จ ์์์ ๋ง๊ฒ ํ๋์ฉ ์ฒ๋ฆฌ
- Async : ํ๋์ ์์ฒญ์ด ๋๋๊ธฐ๋ ์ ์, ๋ค๋ฅธ ์์ฒญ๋ค์ ๋์์ ์ฒ๋ฆฌ
Blocking/Non-Blocking
"ํ๋ก์ธ์ค์ ์ ํด ์ํ์ ๋ํ ๊ฐ๋ "
- Blocking : ๋ค๋ฅธ ์ฃผ์ฒด์ ์์ ์ด ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ ์์ ์ ์์ ์ ์ํ
- Non-Blocking : ๋ค๋ฅธ ์ฃผ์ฒด์ ์์ ์ ๊ด๋ จ ์์ด ์์ ์ ์์ ์ ์ํ
(Blocking/Non-Blocking์ ๊ฒฝ์ฐ ๋ณดํต IO์ ๋ง์ด ์ฌ์ฉ๋๋ค.)
๐ ๋์ ๋น๊ต
Sync/Async์ Blocking/Non-blocking์ ๋ํ ๋์ ๋น๊ต๋
์๋ ๊ทธ๋ฆผ๊ณผ ๊ฐ์ด Thread1์์ ์ฌ๋ฌ ํจ์๋ค์ด ์คํ์ ๊ธฐ๋ค๋ฆฌ๋ ์ํฉ์์, Thread2๋ก ์ฒซ ๋ฒ์งธ ํจ์๋ฅผ ๋๋๋ค๊ณ ๊ฐ์ ํ์ฌ ์ค๋ช ํ๊ฒ ๋ค.
๐ Sync
ํธ์ถ๋ ํจ์์ ์ํ ๊ฒฐ๊ณผ ๋ฐ ์ข ๋ฃ๋ฅผ ํธ์ถํ ํจ์ ๋ฐ ํธ์ถ๋ ํจ์๊ฐ ์ ๊ฒฝ์ด๋ค.
- Thread1์ด ์์ ์ ์์์ํค๊ณ , ํจ์1์ด ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ ํจ์2๋ฅผ ์์ํ๋ค.
- ์์ ์์ฒญ์ ํ์ ๋์ ์์ฒญ์ ๊ฒฐ๊ณผ๊ฐ(return)์ ์ง์ ๋ฐ๋๋ค.
- ํธ์ถํ ํจ์ ๋ฐ ํธ์ถ๋ ํจ์ ๋ชจ๋ ์์ ์ ์๋ฃ๋ฅผ ์ ๊ฒฝ์ด๋ค. (์ฃผ๊ธฐ์ ์ผ๋ก ๊ณ์ ๋ฌผ์ด๋ณธ๋ค.)
๐ Async
ํธ์ถ๋ ํจ์์ ์ํ ๊ฒฐ๊ณผ ๋ฐ ์ข ๋ฃ๋ฅผ ํธ์ถ๋ ํจ์ ํผ์ ์ง์ ์ ๊ฒฝ์ฐ๊ณ , ์ฒ๋ฆฌํ๋ค.
- Thread1์ด ์์ ์ ์์์ํค๊ณ (Callback ํจ์๋ฅผ ํจ๊ป ์ ๋ฌ), ์๋ฃ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ Thread1์ ๋ค๋ฅธ ์ผ์ ์ฒ๋ฆฌํ๋ค.
- ์์ ์์ฒญ์ ํ์ ๋ ์์ฒญ์ ๊ฒฐ๊ณผ๊ฐ(return)์ ๊ฐ์ ์ ์ผ๋ก ๋ฐ๋๋ค.
- ์์ฒญ์ ๊ฒฐ๊ณผ๊ฐ์ด return๊ณผ ๋ค๋ฅผ ์ ์๋ค.
- ํจ์1 ํผ์ ์์ ์๋ฃ๋ฅผ ์ ๊ฒฝ์ด๋ค. (์์ ์๋ฃ ์ Callback ํจ์๋ฅผ ํตํด ๊ฒฐ๊ณผ๊ฐ์ ์ ๋ฌ)
๐ Blocking
ํธ์ถ๋ ํจ์๊ฐ ์์ ์ด ํ ์ผ์ ๋ชจ๋ ๋ง์น ๋๊น์ง ์ ์ด๊ถ์ ๊ฐ์ง๋ฉฐ, ํธ์ถํ ํจ์์๊ฒ ๋ฐ๋ก ๋๋ ค์ฃผ์ง ์๋๋ค.
- ํจ์1์ด ์๋ ์๋ฆฌ๋ฅผ blocking ํด๋๊ณ (์ผ์ ๋ชปํ๊ฒ ๋ง์), ํจ์1์ด ์์ ์ ๋ง์น ๋๊น์ง ๋๊ธฐํ๋ค.
- ํจ์1์ return ๊ฐ์ ๋ฐ์์ผ ๋ค์ ํจ์๋ฅผ ์คํํ ์ ์๋ค.
- ํจ์1์ด returnํ ๋๊น์ง Thread1์ ๊ณ์ ์ฌ์ฉ/๋๊ธฐ๋๋ค.
๐ Non-blocking
ํธ์ถ๋ ํจ์๊ฐ ์์ ์ด ํ ์ผ์ ๋ง์น์ง ์์๋๋ผ๋ ๋ฐ๋ก ์ ์ด๊ถ์ ๊ฑด๋ค์ฃผ์ด(return) ํธ์ถํ ํจ์๊ฐ ๋ค๋ฅธ ์ผ์ ์งํํ ์ ์๊ฒ ํด์ค๋ค.
- ์์ฒญํ ์์ ์ ์ฆ์ ๋ง์น ์ ์๋ค๋ฉด, ๋ฐ๋ก returnํ๋ค.
- ํ๋์ Thread๊ฐ ์ฌ๋ฌ ๊ฐ์ IO๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
โจ Sync/Async์ Blocking/Non-blocking์ ํต์ฌ ์ฐจ์ด์
์์ ๋์ ๋น๊ต์์ Sync๋ Blocking๊ณผ ๋น์ทํ๊ณ , Async๋ Non-blocking๊ณผ ๋น์ทํ๋ค๊ณ ๋ณด์ธ๋ค.
๊ทธ๋ฌ๋ ์ด๋ค์ ๋ช ํํ ๋ค๋ฅธ ๊ฐ๋ ์ผ๋ก, ๊ด์ ์ ์ฐจ์ด๋ก ๊ตฌ๋ถ์ด ๊ฐ๋ฅํ๋ค.
- Sync/Async๋ "์ด๋ค ํจ์๊ฐ ์ ๊ฒฝ์ฐ๋์ง"์ ๊ด์ ์์ ๋ณผ ์ ์๋ค.
- Blocking/Non-blocking์ "์ ์ด๊ถ์ด ์ด๋์๋์ง"์ ๊ด์ ์์ ๋ณผ ์ ์๋ค.
๐ ๋์ ์กฐํฉ
Sync/Async์ Blocking/Non-Blocking์ ์กฐํฉํ์ฌ ๋ง์ด ์ฌ์ฉํ๋๋ฐ,
๋๋ฌด๋๋ ์ ์ ๋ฆฌ๋ ๊ทธ๋ฆผ์ด ์์ด์ ๊ฐ์ ธ์๋ค.
์ผ๋ฐ์ ์ผ๋ก Sync์ Blocking, ๊ทธ๋ฆฌ๊ณ Async์ Non-Blocking์ ์กฐํฉํ์ฌ ๋ง์ด ์ฌ์ฉํ๋ฉฐ,
ASync์ Blocking ์กฐํฉ์ ๊ฒฝ์ฐ ์ฌ์ฉํ๋ ๊ฒ์ ๋ํ ์๋ฏธ๋ฅผ ์ฐพ๊ธฐ ์ด๋ ต๊ธฐ ๋๋ฌธ์ ์ ์ฌ์ฉํ์ง ์๋๋ค.
๐ ์ ๋ฆฌ
Sync/Async์ Blocking/Non-blocking์ ๋ชจ๋ ํ๋ก์ธ์ค๋ฅผ ์ด์ฉํ๋ ๋ฐฉ๋ฒ์ด์ง๋ง, ๊ฐ์ ๊ฐ๋ ์ ์๋๋ค.
Sync/Async๋ ์์์ ๊ฒฐ๊ณผ๊ฐ ์ค์ํ๋ฉฐ, ๋๊ฐ ์ ๊ฒฝ์ฐ๊ณ ์๋์ง์ ๋ํ ๊ด์ ์ผ๋ก ๋ณผ ์ ์๋ค.
Blocking/Non-blocking์ ์ ์ด๊ถ์ ๋๊ฐ ๊ฐ์ง๊ณ ์๋์ง์ ๋ํ ๊ด์ ์ผ๋ก ๋ณผ ์ ์๋ค.
Sync์ Blocking, ๊ทธ๋ฆฌ๊ณ Async์ Non-blocking ์กฐํฉ์ผ๋ก ๋ง์ด ์ฌ์ฉ๋๋ค.
์ฐธ๊ณ
- https://www.inflearn.com/news/72620
- https://steady-coding.tistory.com/531
- https://velog.io/@wonhee010/%EB%8F%99%EA%B8%B0vs%EB%B9%84%EB%8F%99%EA%B8%B0-feat.-blocking-vs-non-blocking
- https://inpa.tistory.com/entry/%F0%9F%91%A9%E2%80%8D%F0%9F%92%BB-%EB%8F%99%EA%B8%B0%EB%B9%84%EB%8F%99%EA%B8%B0-%EB%B8%94%EB%A1%9C%ED%82%B9%EB%85%BC%EB%B8%94%EB%A1%9C%ED%82%B9-%EA%B0%9C%EB%85%90-%EC%A0%95%EB%A6%AC
- https://musma.github.io/2019/04/17/blocking-and-synchronous.html
'5๏ธโฃ CS > Network' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
[Network] SSL/TLS (0) | 2022.10.13 |
---|---|
[Network] TCP์ 3-Way HandShake์ 4-Way HandShake (0) | 2022.10.13 |
๋๊ธ