Blocking / Non-Blocking, Synchronous / Asynchronous
Blocking๊ณผ Asynchronous๋ฅผ ๊ฐ์ ๊ฐ๋
์ผ๋ก ์๋ชป ์ดํดํ๋ ๊ฒฝ์ฐ๊ฐ ๋ง๋ค.
Blocking/Non-Blocking๊ณผ Synchronous/Asynchronous๋ ๋ค๋ฅธ ๊ด์ ์ ๋ค๋ฅธ ๊ฐ๋
์ด๋ค.
ย Blocking / Non-Blocking
ํ ์์
์ด ๋ค๋ฅธ ์์
์ ํธ์ถํ์ ๋, ์ ์ด๊ถ์ด ์ด๋์ ์๋์ง์ ๋ฐ๋ฅธ ์๋ก ๋ค๋ฅธ ๋ฐฉ์์ด๋ค.
ย Blocking
โข
Blocking ํธ์ถ๋ ํจ์๊ฐ ๊ณ์ ์ ์ด๊ถ์ ๊ฐ๊ณ , ๊ธฐ์กด ํจ์๋ ๋๊ธฐํ๋ค.
โข
ํธ์ถ๋ ํจ์๊ฐ ๊ธฐ์กด ํจ์๋ฅผ Blockํ๋ค.
ย Non-Blocking
โข
Non-Blocking ํธ์ถ๋ ํจ์๊ฐ ์ ์ด๊ถ์ ๋ฐ๋ก ๋ฐํํ์ฌ ๊ธฐ์กด ํจ์๊ฐ ๋ค๋ฅธ ์์
์ ์ํํ ์ ์๋ค.
โข
ํธ์ถ๋ ํจ์๊ฐ ๊ธฐ์กด ํจ์๋ฅผ Block ํ์ง ์๋๋ค.
ย Synchronous / Asynchronous
๋๊ธฐ(Synchronous)์ ๋น๋๊ธฐ(Asynchronous)๋ ํ๋ก์ธ์ค ์ํ ์์ ๋ณด์ฅ์ ๊ดํ ์๋ก ๋ค๋ฅธ ๋งค์ปค๋์ฆ์ด๋ค.
ย Synchronous
โข
Synchronous ๋๊ธฐ๋ ์ํ ์์๊ฐ ๋ณด์ฅ๋๋ ๊ฒ์ ์๋ฏธํ๋ค.
โข
์ํ ์์๋ฅผ ๋ณด์ฅํ๊ธฐ ์ํด ๊ธฐ์กด ํจ์๊ฐ ํธ์ถ๋ ํจ์์ ์์
์๋ฃ ์ฌ๋ถ๋ฅผ ํ์ธํ๋ค.
ย Asynchronous
โข
Asynchronous ๋๊ธฐ๋ ์ํ ์์๊ฐ ๋ณด์ฅ๋์ง ์๋ ๊ฒ์ ์๋ฏธํ๋ค.
โข
๊ธฐ์กด ํจ์๋ ์ํ ์์๋ฅผ ํ์ธํ์ง ์๋๋ค. ํธ์ถ๋ ํจ์์๊ฒ Callback์ ์ ๋ฌํด์ ์์
์ ์๋ฃํ๋ฉด ์คํํ๋๋ก ํ๋ ๋ฑ์ ๋ฐฉ์์ด๋ค.
Blocking / Non-Blocking ๊ณผ Synchronous / Asynchronous ๋ฅผ ์กฐํฉํ๋ฉด ์์ ๊ทธ๋ฆผ์ฒ๋ผ 4๊ฐ์ง ๋ฐฉ์์ด ์๊ธด๋ค.
โข
Sync-Blocking
โข
Sync-Nonblocking
โข
Async-Blocking
โข
Async-Nonblocking
Blocking / Non-Blocking ๋ด์ฉ์ ์ด์์ฒด์ ์์ Blocking I/O , Non-Blocking I/O ๋ก, ๋คํธ์ํฌ์์ Blocking API , Non-Blocking API ๋ฑ์ผ๋ก ์๊ฐ๋๊ธฐ๋ ํ๋๋ฐ ๊ทผ๋ณธ์ ์ธ ๋ด์ฉ์ ๊ฐ๋ค.
Blocking / Non-Blocking์ ๊ฐ ๋ถ์ผ๋ค์ ์ ์ฉ๋๋ ๊ฐ๋
์ผ๋ก ์
์ถ๋ ฅ์ ๋ ๊ฐ์ง ๋ฐฉ์์ ๊ตฌ๋ถํ๊ธฐ๋ ํ๊ณ , ๋คํธ์ํฌ์๋ ์ ์ฉ๋๋ ๊ฒ์ด๋ค.
ย Blocking I/O, Non-Blocking I/O
I/O๋ ๋ฐ์ดํฐ์ Input๊ณผ Output์ ์ผ์ปซ๋ ๋ง๋ก ๋คํธ์ํฌ๋ฅผ ํตํ ๋ฐ์ดํฐ์ ์ ์ก, ์ฝ์์ ์
์ถ๋ ฅ ๋ฑ ๋ชจ๋ ๋ฐ์ดํฐ์ ์
์ถ๋ ฅ์ ํฌํจํ๋ ๊ฐ๋
์ด๋ค.
Kernel level์์์ ์
์ถ๋ ฅ์ Blocking๊ณผ Non-Blocking์ ์ ์ฉํ์ฌ ์๊ฐํ๋ค๋ฉด, Process, Thread๊ฐ ๊ธฐ์กด ํจ์์ด๊ณ ์ปค๋์ I/O๋ฅผ ํธ์ถํ๋ ํํ๋ก ์ดํดํ ์ ์๋ค.