Search
Duplicate
โš™๏ธ

Blocking / Non-Blocking, Synchronous / Asynchronous

์ƒ์„ฑ์ผ
2023/04/06 03:25
ํƒœ๊ทธ
OS

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๋ฅผ ํ˜ธ์ถœํ•˜๋Š” ํ˜•ํƒœ๋กœ ์ดํ•ดํ•  ์ˆ˜ ์žˆ๋‹ค.

ref)