๐๋๊ธฐ์ ๋น๋๊ธฐ
1. Sync VS Async
๋จผ์ Synchronous์ Asynchronous์ ์ด์์ ๋ณด์. Synchronous์ Syn๋ together์ด๋ ๋ป์ด๊ณ , chrono๋ time์ด๋ค. ๋ฐ๋ผ์ Synchronous๋ ํจ๊ป ์๊ฐ์ ๋ง์ถ๋ค๋ผ๋ ๋ป์ผ๋ก ํด์๋๋ค. ๋ฐ๋ฉด์ Asynchronous๋ ์์ A๋ผ๋ ์ ๋์ฌ๊ฐ ๋ถ์ด ๋ถ์ ํ๋ ํํ๊ฐ ๋์ด ์๊ฐ์ ๋ง์ถ์ง ์๋ ๊ฒ์ด๋ผ ํด์ํ ์ ์๋ค.
Sync์ Async๋ฅผ ๋ค๋ฃจ๋ ค๋ฉด ์ ์ด์์์ ๋ณผ ์ ์๋ฏ์ด ํจ๊ป ํ๋ ๋์์ด ๋๊ตฌ์ธ์ง, ๊ทธ ๋์๋ค์ ์๊ฐ์ ์ด๋ป๊ฒ ๋ค๋ฃจ์ด์ง๋์ง ๋ ๊ฐ์ง๋ฅผ ์ดํด๋ด์ผํ๋ค.
1.1. Synchronous (๋๊ธฐ) : ์์ ์ ์์๊ฐ ๋ณด์ฅ๋๋ค.
๋๊ธฐ๋ ๋ ๊ฐ์ง ์ด์์ ๋์(ํจ์, ์ ํ๋ฆฌ์ผ์ด์ ๋ฑ)์ด ์๋ก ์๊ฐ์ ๋ง์ถฐ ํ๋ํ๋ ๊ฒ์ด๋ค. ์๋ฅผ๋ค์ด ํธ์ถํ ํจ์๊ฐ ํธ์ถ๋ ํจ์์ ์์ ์ด ๋๋์ ๊ฒฐ๊ณผ๊ฐ์ ๋ฐํํ๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๊ฑฐ๋, ์ง์์ ์ผ๋ก ํธ์ถ๋ ํจ์์๊ฒ ํ์ธ ์์ฒญ์ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.
์ด๋ค ๋์ A์ B๊ฐ ์์ ๋ ๋๊ธฐ์ ์ผ๋ก ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ ๋ ๊ฐ์ง๋ฅผ ์ดํด๋ณด์.
A์ B๊ฐ ์์ ์๊ฐ ๋๋ ์ข ๋ฃ ์๊ฐ์ด ์ผ์นํ๋ฉด ๋๊ธฐ์ด๋ค. ์๋ฅผ ๋ค์ด
A, B ์ฐ๋ ๋๊ฐ ๋์์ ์์ ์ ์์ํ๋ ๊ฒฝ์ฐ (์๋ฅผ ๋ค๋ฉด ์๋ฐ์์ CyclicBarrier)
๋ฉ์๋ ๋ฆฌํด ์๊ฐ(A)๊ณผ ๊ฒฐ๊ณผ๋ฅผ ์ ๋ฌ๋ฐ๋ ์๊ฐ(B)์ด ์ผ์นํ๋ ๊ฒฝ์ฐ
A๊ฐ ๋๋๋ ์๊ฐ๊ณผ B๊ฐ ์์ํ๋ ์๊ฐ์ด ๊ฐ์ผ๋ฉด ๋๊ธฐ์ด๋ค. ์๋ฅผ ๋ค์ด ์๋ฐ์์ synchronized
์ BlockingQueue๊ฐ ์์ ๊ฐ์ ๊ฒฝ์ฐ์ด๋ค.
1.2. Asynchronous (๋น๋๊ธฐ) : ์์ ์ ์์๊ฐ ๋ณด์ฅ๋์ง ์๋๋ค.
๋น๋๊ธฐ๋ ๋๊ธฐ์ ๋ฐ๋๋ก ๋์์ด ์๋ก ์๊ฐ์ ๋ง์ถ์ง ์๋ ๊ฒ์ ๋งํ๋ค. ์๋ฅผ ๋ค์ด ํธ์ถํ๋ ํจ์๊ฐ ํธ์ถ๋๋ ํจ์์๊ฒ ์์ ์ ๋งก๊ฒจ๋๊ณ ์ ๊ฒฝ์ ์ฐ์ง ์๋ ๊ฒ์ ๋งํ๋ค
2. Blocking VS Non-Blocking
๋ธ๋กํน/๋ ผ๋ธ๋กํน์ ๋๊ธฐ/๋น๋๊ธฐ์ ๊ฐ์ด ์๊ฐํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง์๋ฐ, ์ด๋ ์๋ก ๊ด์ ์ด ๋ค๋ฅด๋ค. ๋ธ๋กํน/๋ ผ๋ธ๋กํน์ ์ง์ ์ ์ดํ ์ ์๋ ๋์์ ์ฒ๋ฆฌํ๋ ๋ฐฉ๋ฒ์ ๋ฐ๋ผ ๋๋๋ค. ์ง์ ์ ์ดํ ์ ์๋ ๋์์ ๋ํ์ ์ผ๋ก IO, ๋ฉํฐ์ฐ๋ ๋ ๋๊ธฐํ๊ฐ ์๋ค.
2.1. Blocking : ์์ ์ ๋ฉ์ถค, ๋๊ธฐ(wait)
Blocking์ ์ง์ ์ ์ดํ ์ ์๋ ๋์์ ์์ ์ด ๋๋ ๋๊น์ง ์ ์ด๊ถ์ ๋๊ฒจ์ฃผ์ง ์๋ ๊ฒ์ด๋ค. ์๋ฅผ ๋ค์ด ํธ์ถํ๋ ํจ์๊ฐ IO๋ฅผ ์์ฒญํ์ ๋ IO์ฒ๋ฆฌ๊ฐ ์๋ฃ๋ ๋๊น์ง ์๋ฌด ์ผ๋ ํ์ง ๋ชปํ ์ฑ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ ๋งํ๋ค.
์์ ์ ์์ํ๊ณ ์์ ์ด ๋๋ ๋๊น์ง ๋๊ธฐํ๋ค๊ฐ ์ฆ์์์ ์๋ฃ ํต์ง๋ฅผ ๋ฐ๋๋ค. ์ด ๋ ์์ ์ด ๋ฉ์ถ๋ ๋์ ๋ค๋ฅธ์์ ์ด ๋ผ์ด๋ค ์ ์๋์ง ์๋์ง์ ๋ํด ์ด์ผ๊ธฐ ํด๋ณด์. ๋ง์ Blocking ๋ฐฉ์์ ์ฌ๋ก์์ ๋ค๋ฅธ ์์ ์ interrupt๋ฅผ ๋ฐฉ์งํ๊ธฐ ๋๋ฌธ์, Blocking์ ๋๊ธฐํ(์์ฐจ์ฒ๋ฆฌ)๋ชจ๋ธ๋ก ์๊ฐํ๋ ์ค๋ฅ๊ฐ ์๊ธด๋ค. ๋จ์ํ ์๊ฐํด์ Blocking์ ๊ทธ์ ์์ ์ ์ํํ๋๋ฐ ์์ด์ ๋๊ธฐ ์๊ฐ์ ๊ฐ๋๋ค๋ ์๋ฏธ์ผ ๋ฟ์ด๋ค.
- Blocking I/O Model
User Process(application)๋ ์ปค๋(OS)์๊ฒ I/O ์์ ์ ๋ํ ์์ฒญ์ ํด์ผ ํ๋ค.
I/O ์์ ์ ์ฒ๋ฆฌํ๊ธฐ ์ํด User Level์ ์๋ application์ด ์์คํ ํจ์๋ฅผ ํธ์ถํ๋ค.(system call) ์ด ๋ context-switching์ด ๋ฐ์ํ๋ค.
Kerner Level์ ํด๋น I/O์์ ์ด ๊ธ๋๊ณ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๊ฒ ๋๋ฉด ๊ทธ ๋๊ฐ ๋์์ผ ์ ํ๋ฆฌ์ผ์ด์ ๋จ์ ์ค๋ ๋์ ๊ฑธ๋ ธ๋ block์ด ํ๋ฆฐ๋ค.
โblocking I/O ๋ฌธ์ ์ ?
์ ํ๋ฆฌ์ผ์ด์ ๊ด์ ์์ ๋ณด๋ฉด ์๋ฌด๋ฐ ๋์๋ ์ํ๋ ๊ฒ์ฒ๋ผ ๋ณด์ด์ง๋ง ์ค์ ๋ก๋ ์ปค๋์์ I/O์์ ์ ์ํํ๋๋ผ block๋์ด ์๋ ๊ฒ์ด ๋ฌธ์ ์ ์ด๋ค.
- Synchronous(๋๊ธฐ) VS Blocking
Synchronous
์์ ์ ์์ฒญํ ํ ์์ ์ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ ํ ์ฒ๋ฆฌํ๋ ๊ฒ์ผ๋ก I/O ์์ ์ ๋ํ readiness๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค. ํน์ I/O ์์ ์ ํ๊ธฐ ์ํ ์ค๋น๊ฐ ๋์๋์ง์ ์ง์คํ๋ ๊ฒ์ด๋ค.
โ ์์คํ ๋ฐํ์ ๊ธฐ๋ค๋ฆฌ๋ ๋์ ๋๊ธฐ ํ์ ๋จธ๋ฌด๋ ๊ฒ์ด ํ์๊ฐ ์๋๋ฉด synchronous
Blcoking
I/O๊ฐ ๋๋ ๋๊น์ง ๋๊ธฐํด์ผ ํ๋ค. ๋๋๊ธฐ ์ ์๋ ํจ์๊ฐ ๋ฐํ๋์ง ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ปค๋์ด ์์์ ์๋ฃํ๊ธฐ ์ ๊น์ง ์ ์ ํ๋กใ ์ฐ๋ ์์ ์ ์ค๋จํ ์ฑ ๋๊ธฐํด์ผํ๋ค.
โ์์คํ ๋ฐํ์ ๊ธฐ๋ค๋ฆฌ๋ ๋์ ๋๊ธฐ ํ์ ๋จธ๋ฌด๋ ๊ฒ์ด ํ์์ด๋ฉด blocking
2.2. Non-Blocking
Non-Blocking์ Blocking๊ณผ ๋ฐ๋๋๋ ๊ฐ๋ ์ด๋ค. ์ง์ ์ ์ดํ ์ ์๋ ๋์์ ์์ ์ฒ๋ฆฌ ์ฌ๋ถ์ ์๊ด์ด ์๋ค. ์๋ฅผ ๋ค์ด ํธ์ถํ๋ ํจ์๊ฐ IO๋ฅผ ์์ฒญํ ํ IO์ฒ๋ฆฌ ์๋ฃ ์ฌ๋ถ์ ์๊ด์์ด ๋ฐ๋ก ์์ ์ ์์ ์ ํ ์ ์๋ค.
Non-Blocking ์ด๋ ์์ ์ ์๋ฃ๋ฅผ ๋์ค์ ํต์ง๋ฐ๋ ๊ฐ๋ ์ด๋ค. ์์ ์ ์์ ์ดํ ์๋ฃ์๊น์ง ๋๊ธฐํ์ง ์๊ณ ์๋ฃ์ํจ๋ค.
- Non-blocking I/O Model
์์ ์ค๋ช ํ Blocking I/O ๋ฐฉ์์ ์์ฒญํ I/O์์ ์ด ๋๋ ๋๊น์ง ๋๊ธฐํด์ผ ํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์ปค๋์ด ์์ ์ ์๋ฃํ๊ธฐ ์ ๊น์ง ์ ์ ํ๋ก์ธ์ค๋ ์์ ์ ์ค๋จํ ์ฑ ๋๊ธฐ ํด์ผํ๋ค. I/O์์ ์ CPU์์์ ๊ฑฐ์ ์ฐ์ง ์๊ธฐ ๋๋ฌธ์ blocking๋ฐฉ๋ฒ์ CPU์์ ๋ญ๋น๊ฐ ์ฌํ๋ค.
โnon-blocking๋ฐฉ์์ I/O์์ ์ ์งํํ๋ ๋์ ์ ์ ํ๋ก์ธ์ค์ ์์ ์ ์ค๋จ์ํค์ง ์๋๋ค. ์ ์ ํ๋ก์ธ์ค๊ฐ I/O๋ฅผ ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ปค๋๋ ํจ์๋ฅผ ํธ์ถํ๋ฉด(System Call) ์ปค๋์์ ํจ์์ ์งํ ์ํฉ๊ณผ ์๊ด์์ด ๋ฐ๋ก ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๋ค. (๋ฐํ๋๋ ๊ฒฐ๊ณผ๋ ๋ฐํ ์๊ฐ์ ๊ฐ์ ธ์ฌ ์ ์๋ ๋ฐ์ดํฐ์ด๋ค)
์๋ฒ๋ ํด๋ผ์ด์ธํธ๊ฐ ์์ฒญํ ์ฌ์ด์ฆ์ ๋ง๋ ๋ฐ์ดํฐ๋ฅผ ๋ฐํํ๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ์ถ์ ํด์ผ ํ๋ค. ๋ฐ์ดํฐ์ ์ถ์ ์ด ๋๋ฌ์ ๋ ๋ฐํ๋์ด ํด๋ผ์ด์ธํธ์์ ์์ฒญํ ์ฌ์ด์ฆ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์์ฌ ์ ์๊ฒ ๋๋ค. ํ์ง๋ง ์ด ๊ตฌํ ๋ฐฉ์์ ๋ฌธ์ ๋ ํด๋ผ์ด์ธํธ๊ฐ ๋ฐ๋ก ๋ฐํ๋๋ ๊ฐ์ด ์ํ๋ ์ฌ์ด์ฆ๊ฐ ๋์๋์ง ๊ณ์ ํ์ธํด์ค์ผํ๋ค.(polling) ์ด ๊ณผ์ ์์ ์๋ง์ ํด๋ผ์ด์ธํธ์ ์์ฒญ์ด ๋์ ๋ค๋ฐ์ ์ผ๋ก ์ผ์ด๋ ๊ฒฝ์ฐ, cPU์ ์ ์ง ์์ ๋ถ๋ด์ด ๋ ์ ์๋ I/O Model์ด๋ค.
blocking
application ์คํ ์ ์ด์์ฒด์ ๋๊ธฐ ํ์ ๋ค์ด๊ฐ๋ฉด์ ์์ฒญ์ ๋ํ system call์ด ์๋ฃ ๋ ํ์ ์๋ต์ ๋ณด๋ผ ๊ฒฝ์ฐ blocking
non-blocking
application์ด ์คํ ์ ์ด์์ฒด์ ๋๊ธฐ ํ์ ๋ค์ด๊ฐ์ง ์๊ณ ์คํ ์ฌ๋ถ์ ๊ด๊ณ์์ด ๋ฐ๋ก ์๋ต์ ๋ณด๋ผ ๊ฒฝ์ฐ non-blocking
๋๊ธฐํ
๊ณต์ ์์์ ๋์์ ์ฌ์ฉํ์ง๋ชปํ๊ฒ ์คํ์ ์ ์ดํ๋ ๋ฐฉ๋ฒ
๋๊ธฐํ๋ ์์ฐจ์ ์ผ๋ก ์ฌ์ฌ์ฉ ๊ฐ๋ฅํ ์์์ ๊ณต์ ํ๋ ค๊ณ ์ํธ์์ฉํ๋ ํ๋ก์ธ์ค ์ฌ์ด์์ ๋ํ๋๋ค.
๋๊ธฐ๋ ์์ฒญ์ ๋ณด๋ธ ํ ์๋ต์ ๋ฐ์์ผ์ง๋ง ๋ค์ ๋์์ด ์ด๋ฃจ์ด์ง๋ ๋ฐฉ์์ผ๋ก ์์ฐจ์ ์ผ๋ก ์คํ๋๋ค.
๋น๋๊ธฐํ
๋ณ๋ ฌ์ ์ผ๋ก ํ ์คํฌ ์ํํ๋ ๋ฐฉ์
eg)์๋ฒ๋ก ๋ถํฐ ๋ฐ์ดํฐ๋ฅผ ๋ฐ์ ์น์ ๋ง๋ ๋ค.
๋ค์ํ ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๊ธฐ ๊น์ง ์น์ด ๋๊ธฐํ๋ ์ํ๋ฅผ ์์ ๊ธฐ ์ํด ๋น๋๊ธฐ์ฒ๋ฆฌ๋ฅผํ๋ค.(AJAX,setTimeout)
ํ๋ก์ธ์ค
์คํ ์ค์ธ ํ๋ก๊ทธ๋จ โ ๋์คํฌ์ ์๋ ํ๋ก๊ทธ๋จ์ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌํ์ฌ ์ด์์ฒด์ ์ ์ ์ด๋ฅผ ๋ฐ๋ ์ํ๊ฐ ๋์๋ค.(์์ ๋ง์ ๋ฉ๋ชจ๋ฆฌ ์์ด ์์)
eg)์น ๋ธ๋ผ์ฐ์ ์ฐฝ์ ํ๊ฐ ์ด์๋ค. == ํ๋ก์ธ์ค ํ๊ฐ ์์ฑ
์น ๋ธ๋ผ์ฐ์ ์ฐฝ 2๊ฐ ์ด์๋ค. == ํ๋ก์ธ์ค 2๊ฐ ์์ฑ
๋๊ธฐ์/๋น๋๊ธฐ
2+
๋๊ธฐSyn(together)chrono(time)us : ํจ๊ป ์๊ฐ์ ๋ง์ถ๋ค.
๋น๋๊ธฐ Asynchronous : ์๊ฐ์ ๋ง์ถ์ง ์๋๋ค.
โ>์ผ๋ฐ์ ์ผ๋ก C๋ถํฐ ์คํ
๋น๋๊ธฐ๋ return๊ฐ ๋ฐ์์๊ฐ๊ณผ ํธ์ถํ๋์๊ฐ์ด ๊ฐ์์ ธ์ ๋น๋๊ธฐ๋ผ ํ ์ ์๋ค.
https://velog.io/@codemcd/Sync-VS-Async-Blocking-VS-Non-Blocking-sak6d01fhx
'CS > ์ด์์ฒด์ ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
4. ๋ฉํฐ ํ๋ก์ธ์ค์ ๋ฉํฐ ์ค๋ ๋ (0) | 2024.07.12 |
---|---|
3. ๋ฉํฐ ํ์คํน๊ณผ PCB์ ์ปจํ ์คํธ ์ค์์นญ (0) | 2024.07.12 |
2. ํ๋ก๊ทธ๋จ๊ณผ ํ๋ก์ธ์ค, ์ค๋ ๋ (0) | 2024.07.12 |
1. ์ด์์ฒด์ ์ ์ปดํจํฐ (0) | 2024.07.12 |
์บ์ (0) | 2021.11.21 |