๋๊ธฐ & ๋น๋๊ธฐ
๋ธ๋กํน & ๋ ผ๋ธ๋กํน
๋น๊ต
์กฐํฉ
์กฐ๊ฑด
๋๊ธฐ & ๋น๋๊ธฐ๋ ์์
์ ์ํํ๋ ์ฃผ์ฒด๊ฐ 2๊ฐ ์ด์
์ด์ฌ์ผ ํ๋ค.
๊ด์
์ฒ๋ฆฌํด์ผ ํ ์์ ๋ค์ย ์ด๋ ํ โํ๋ฆโ์ผ๋ก ์ฒ๋ฆฌ ํ ๊ฒ์ธ๊ฐ์ ๋ํ ๊ด์
๋๊ธฐ์ ๋น๋๊ธฐ๋ฅผ ๋๋๋ ๊ธฐ์ค โ ์์ ์๋ฃ ์ฌ๋ถ
์์
์ด ์๋ฃ๋์๋์ง ์๋์ง ํ์ธํ๋ ์ฃผ์ฒด์ ๋ฐ๋ผ
๋๊ธฐ & ๋น๋๊ธฐ๋ก ๋๋๋ค.
- ๋๊ธฐ : ํจ์๋ฅผ ํธ์ถํ ์ฃผ์ฒด๋ ํด๋น ํจ์์ ์์ ์ด ์๋ฃ๋์๋์ง ํ์ธํ๋ค.
- ๋น๋๊ธฐ : ํจ์๋ฅผ ํธ์ถํ ์ฃผ์ฒด๋ ํด๋น ํจ์์ ์์ ์๋ฃ ์ฌ๋ถ๋ฅผ ์ ๊ฒฝ์ฐ์ง ์๋๋ค.
๋๊ธฐ์ ์์
์ด๋ 2๊ฐ ์ด์์ ์ฃผ์ฒด๊ฐ ์์
์ ๋์์ ์์
, ์์
์ ๋์์ ์ข
๋ฃ
, ํ๋์ ์์
์ ๋๋๋ ๋์์ ๋ค๋ฅธ ์ฃผ์ฒด๊ฐ ์์
์ ์์
ํ๋ ์์ ํ๋ฆ์ผ๋ก ์์
๋ค์ ์ฒ๋ฆฌํ๋ค.
- ์์ ์๊ฐ๊ณผ ์ข
๋ฃ ์๊ฐ์ ๋ง์ถ(Synchronize) ๊ฒฝ์ฐ
- ex) ํ๋ก๊ทธ๋จ ์ค์น ์์ ๊ณผ ์ค์น๊ฒฝ๊ณผ๋ฅผ Progress Bar๋ก ํ์ํ๋ ์์ ์ ๋์์ ์์๋๊ณ ๋์์ ๋๋๋ค. (๋๊ธฐ + ๋ ผ๋ธ๋กํน ์์ )
- ์์ ์ข ๋ฃ ์๊ฐ์ ๋ง์ถฐ(Synchronize) ๋ค๋ฅธ ์ฃผ์ฒด๊ฐ ์์ ์ ์์ํ๋ ๊ฒฝ์ฐ (์์ง๋์ดA์ ์์ ๊ฒฐ๊ณผ๊ฐ ์์ด์ผ ์์ง๋์ดB๊ฐ ์์ ์ ํ ์ ์๋ค)
๋น๋๊ธฐ์ ์์
์ด๋ 2๊ฐ ์ด์์ ์ฃผ์ ๊ฐ ์์
์ ์์์๊ฐ, ์ข
๋ฃ์๊ฐ์ ๊ด๊ณ ์์ด ๊ฐ์ ๋ณ๋์ ์์์๊ฐ, ์ข
๋ฃ์๊ฐ์ ๊ฐ์ง๋ฉฐ
์์
๋ค์ ์ฒ๋ฆฌํ๋ค.
- ์๋ก์ ์์
์์๊ฐ ํฌ๊ฒ ์ค์ํ์ง ์์ ๊ฒฝ์ฐ
- ex) html ํ์ผ์ ํ๋ฉด์ ๊ทธ๋ฆฌ๋ ์์ ๊ณผ img ํํฌ์ ์ด๋ฏธ์ง๋ฅผ ๋ก๋ํ๋ ์์ (๋น๋๊ธฐ + ๋ ผ๋ธ๋กํน ์์ )
์กฐ๊ฑด
๋ธ๋กํน & ๋
ผ๋ธ๋กํน์ ์์
์ ๋์์ด 2๊ฐ ์ด์
์ด์ฌ์ผ ํ๋ค.
๊ด์
์ฒ๋ฆฌ๋์ด์ผ ํ๋ (ํ๋์) ์์ ์ด,ย ์ ์ฒด์ ์ธ ์์ ย ํ๋ฆ์ โ๋ง๋๋ ์๋ง๋๋โ์ ๋ํ ๊ด์
๋ธ๋กํน๊ณผ ๋ ผ๋ธ๋กํน์ ๋๋๋ ๊ธฐ์ค โ ์ ์ด๊ถ
ํจ์๋ฅผ ํธ์ถํ ์ฃผ์ฒด๊ฐ ํจ์์๊ฒ ์ ์ด๊ถ์ ๋๊ฒจ์ฃผ๋์ง
์ ๋ฐ๋ผ ๋ธ๋กํน & ๋
ผ๋ธ๋กํน์ผ๋ก ๋๋๋ค.
- ๋ธ๋กํน : ํจ์๋ฅผ ํธ์ถํ ์ฃผ์ฒด๊ฐ ์ ์ด๊ถ์ ํจ์์๊ฒ ๋๊ฒจ์ฃผ๊ธฐ ๋๋ฌธ์ ํธ์ถํ ํจ์์ ์์ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค. (ํธ์ถ๋ ํจ์๋ ์์ ์ ๋ง์น ๋๊น์ง ์ ์ด๊ถ์ ๊ฐ๊ณ ์๋๋ค)
- ๋ ผ๋ธ๋กํน : ํจ์๋ฅผ ํธ์ถํ ์ฃผ์ฒด๊ฐ ๊ณ์ ํด์ ๋ค๋ฅธ ์์ ์ ์ํํ๋ค.
ํจ์๋ฅผ ํธ์ถํ ์ฃผ์ฒด๊ฐ ์ ์ด๊ถ์ ํจ์์๊ฒ ๋๊ฒจ์ฃผ๋ฉด ํธ์ถ๋ ํจ์๊ฐ ์์ ์ ์๋ฃํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํํ๊ธฐ๊น์ง ๊ธฐ๋ค๋ ธ๋ค๊ฐ(blocked) ์์ ๊ฒฐ๊ณผ๋ฅผ ๋ฐํ๋ฐ์ผ๋ฉด ๊ทธ์ ์์ผ ์์ ์ ์ด์ด๊ฐ๋ค.
- ex) Java์์ JDBC๋ฅผ ์ฌ์ฉํ์ฌ DB์ ์ฟผ๋ฆฌ๋ฅผ ๋ ๋ฆฌ๊ณ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ค๋ ์์
์์ ์ ์ํํ๋ ์ฃผ์ฒด๊ฐ ํจ์๋ฅผ ํธ์ถํ์ฌ ๋ค๋ฅธ ์์ ์ ์์ฒญํ๊ณ , ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ ๋๊น์ง ๋๊ธฐํ์ง ์๊ณ ์์ ์ ์์ ์ ์ํํ๋ค.
๋น๋๊ธฐ์ ๋ ผ๋ธ๋กํน์ ๋ฌด์จ ์ฐจ์ด?
๋น๋๊ธฐ
๋ ์์ ๋ค์ ์ฒ๋ฆฌํ ๋ ์๋ก์ ์๊ฐ์ ๋ง์ถ์ง ์๋๋ค.๋ ผ๋ธ๋กํน
์ ์ฒ๋ฆฌ๋์ด์ผ ํ๋ ํ๋์ ์์ ์ด ์ ์ฒด ์์ ์ ํ๋ฆ์ ๋ง์ง ์๋๋ค.
๋๊ธฐ์ ๋ธ๋กํน์ ๋ฌด์จ ์ฐจ์ด?
๋๊ธฐ
๋ ์์ ๋ค์ ์ฒ๋ฆฌํ ๋ ์๋ก์ ์๊ฐ์ ๋ง์ถ๋ค.๋ธ๋กํน
์ ์ฒ๋ฆฌ๋์ด์ผ ํ๋ ํ๋์ ์์ ์ด ์ ์ฒด ์์ ์ ํ๋ฆ์ ๋ง๋๋ค.
์์
๊ธํ๊ฒ ์์์ผ ํ๋ ๋ต์ ๋๊ตฐ๊ฐ์๊ฒ ๋ฌผ์ด๋ด์ผํ๋ ์ํฉ์์
๋๊ธฐ
: ์ ํ๋ก ๋ฌผ์ด๋ด์ ์ฆ๋ต์ ์ป๋๋ค.๋น๋๊ธฐ
: ์ด๋ฉ์ผ ์ก์ ์ ์๋ฃ(return)ํ์ง๋ง, ๋ต์ด ์ธ์ ์ฌ์ง ๋ชจ๋ฅธ๋ค๋๊ธฐ + ๋ธ๋กํน
: ์ ํ๋ฅผ ํ์ง๋ง ์๋๊ฐ ๋ฐ์ง ์๋๋ค. ๋ฐ์ ๋๊น์ง ์ ์ ๊ธ๊ธ ๊ณ์ ๋๊ธฐํ๋ค.๋๊ธฐ + ๋ ผ๋ธ๋กํน
: ์ ํ๋ฅผ ํ์ง๋ง ์๋๊ฐ ๋ฐ์ง ์๋๋ค. ๋์๋ค๊ฐ ๋์ค์ ๋ค์ ์ ํํ๊ธฐ๋ฅผ ๋ฐ๋ณตํ๋ค. ์ด๋ ์๊ฐ ๋ฐ์์ ๋ต์ ์ป๋๋ค.
ํ๋ก์ ํธ๋ฅผ ๊ฐ๋ฐํ๋ ๊ฐ๋ฐ ๋ถ์ ์์
- ํ๋ก์ ํธ์๋ ์ฌ๋ฌ ์์ ๋ค์ด ์๋ค โ ๋ธ๋กํน & ๋ ผ๋ธ๋กํน
- ํ๋ก์ ํธ์ ์ฌ๋ฌ ์์ ์ ์ํํ๋ ์ฃผ์ฒด๊ฐ ์ฌ๋ฌ๋ช ์ด๋ค โ ๋๊ธฐ & ๋น๋๊ธฐ
์ฐ๋ฆฌ๊ฐ ๊ฐ์ฅ ํํ๊ฒ ์ ํ๋ ๋๊ธฐ ๋ฐฉ์์ ์๋ ๋ฐ๋กย ๋๊ธฐ & ๋ธ๋กํน
ย ๋ฐฉ์์ด๋ค
๐์์1
๋๊ธฐ
๊ธฐ๋ฅ A์ ๊ฐ๋ฐ์ด ์ ํ๋์ด์ผ ๊ธฐ๋ฅ B๋ฅผ ๋ง๋ค ์ ์๊ธฐ ๋๋ฌธ์ ์์ง๋์ดA์ ์์ ์ด ๋๋๋ ๋์์ ์์ง๋์ด B๊ฐ ์์ ์ ์์ํ๋๋ก ์์ ํ๋ฆ(์์)์ ๋ง์ถ์ด์ผ ํ๋ค.
๋ธ๋กํน
์์ง๋์ดA๊ฐ ๊ธฐ๋ฅA๋ฅผ ๊ฐ๋ฐํ๋ ๋์ ํ๋ก์ ํธ์ ์งํ์ด ๋ฉ์ถ๋ค(blocked). ๊ธฐ๋ฅA๋ฅผ ๋ชจ๋ ๊ฐ๋ฐํ ๋ค์์ผ ํ๋ก์ ํธ๊ฐ ์งํ๋๋ค.
๐์์2
๋๊ธฐ
์์ ์์: ์ปค๋์ Read IO ์์ ์ด ์ ํ๋๊ณ ์ดํ๋ฆฌ์ผ์ด์ ์ Read() ํจ์์ ๋๋จธ์ง ์์ ์ด ๋์ค์ ์ํ๋๋ค.
๋ธ๋กํน
์ดํ๋ฆฌ์ผ์ด์ ์ ์ปค๋์ Read IO ์์ ์ด ์๋ฃ๋ ๋๊น์ง ๋ค์ ์์ ์ ์ํํ์ง ๋ชปํ๊ณ ๋๊ธฐํด์ผํ๋ค.
๋ชจ๋ ์คํ๊ณผ ํ๋ฆ์ด ์์ฐจ์ ์ด๊ธฐ ๋๋ฌธ์ ๊ฐ๋ฐ์๊ฐ ํ๋ก๊ทธ๋จ์ ์ ์ดํ๊ธฐ๊ฐ ์ฝ๊ณ ๊ฐ์ฅ ๋ง์ด ์ฐ์ด๋ ์กฐํฉ ์ค ํ๋์ด๋ค.
๐์์1
๋๊ธฐ
๊ธฐ๋ฅA๊ฐ ๊ฐ๋ฐ์ด ๋์ด์ผ ๊ธฐ๋ฅ B๋ฅผ ๊ฐ๋ฐํ ์ ์๋ค.
๋ ผ๋ธ๋กํน
์์ง๋์ดA๊ฐ ๊ธฐ๋ฅA๋ฅผ ๊ฐ๋ฐํ๋ ๋์ ํ๋ก์ ํธ์ ์งํ์ ๋ฉ์ถ์ง ์๋๋ค. ๋์ ๊ธฐ๋ฅA์ ๊ฐ๋ฐ์ด ๋๋ฌ๋์ง ์ฃผ๊ธฐ์ ์ผ๋ก ํ์ธํ๋ ์์ (polling)์ ํ๋ค.
๐์์2
๋๊ธฐ
์์ ์์: ์ปค๋์ Read IO ์์ ์ด ์ ํ๋๊ณ ์ดํ๋ฆฌ์ผ์ด์ ์ Read() ํจ์์ ๋๋จธ์ง ์์ ์ด ๋์ค์ ์ํ๋๋ค.
๋ ผ๋ธ๋กํน
์ดํ๋ฆฌ์ผ์ด์ ์ ์ปค๋์๊ฒ Read IO์์ ์ ์์ฒญํ๊ณ ์ ์ด๊ถ์ ๋๊ธฐ์ง๋ง, ์ปค๋์ ์์ ์๋ฃ ์ฌ๋ถ์ ๊ด๊ณ์์ด ์ ์ด๊ถ์ ๋ฐํํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ปค๋์ Read IO ์์ ์ด ์๋ฃ๋๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ดํ๋ฆฌ์ผ์ด์ ์๊ฒ ๋ฐํํ๋ค.
์์
์ ํ๋ฆ์ ๋น๋๊ธฐ๋ก ์ค๊ณํ์ง๋ง, ๋ธ๋กํน ๋๋ฌธ์ ๋๊ธฐ + ๋ธ๋กํน
๊ณผ ๊ฐ์ ํ๋ฆ์ ๊ฐ๊ฒ ๋๋ค.
๋น๋๊ธฐ + ๋ธ๋กํน
์ ๊ฐ์ฅ ๋นํจ์จ์ ์ธ ๋ชจ๋ธ๋ก ์๋์น ์๊ฒ ๋์ํ๋ ๊ฒฝ์ฐ๊ฐ ์๋ค.- ์ง๊ด์ ์ธ ์ฝ๋์ ํ๋ฆ์ ์ ์งํ๋ฉด์ ์์
์ ๋ณ๋ ฌ์ ์ผ๋ก ์ฒ๋ฆฌํ๊ธฐ ์ํด ์ฌ์ฉํ๋ค. (Linux/UnixS OS์ I/O ๋ค์คํ ๋ชจ๋ธ ๋ฑ์์ ์ฌ์ฉ๋๋ค)
-
- ๋๊ธฐ & ๋ธ๋กํน I/O์ ๊ฒฝ์ฐ ์ง๊ด์ ์ด๋, ์ฌ๋ฌ ๊ฐ์ I/O๋ฅผ ๋์์ ์ฒ๋ฆฌํ ์ ์๋ค.
-
- ๋ ผ๋ธ๋กํน I/O๋ ํ๋ก์ธ์ค๋ค์ ์์ ์ ์ปจํธ๋กคํ๋ ๊ฒ์ด ๊น๋ค๋กญ๋ค. (๋๋ถ๋ถ ์ด๋ฐ ์ ๋ ๋ฒจ ํ๋ก๊ทธ๋จ์ C๋ก ์ง ๋ค. JS๋ Python ๊ฐ์ ๊ฑธ ์๊ฐํ๋ฉด ์๋๋ค.)
-
- ๊ทธ๋ ๋ค๊ณ ๋๊ธฐ & ๋ธ๋กํน I/O์ ๋ฉํฐ ํ๋ก์ธ์ฑ์ด๋ ์ฐ๋ ๋ฉ์ ๊ฒฐํฉํด์ ์ฐ์๋ ์์ ๋ฌธ์ ๋ ์๊ณ ํ๋ก์ธ์ค/์ฐ๋ ๋ ๊ฐ ํต์ ์ด๋ ๋๊ธฐํ๊ฐ ๋นก์
-
๐์์1
๋น๋๊ธฐ
๊ธฐ๋ฅ A๊ฐ ๋ฐ๋์ ๊ธฐ๋ฅB๋ณด๋ค ๋จผ์ ๊ฐ๋ฐ๋ ํ์๊ฐ ์๋ค. ์ฆ, ์์ ์ ์ฐ์ ์์๊ฐ ์๋ค.
๋ธ๋กํน
์์ง๋์ดA๊ฐ ๊ธฐ๋ฅA๋ฅผ ๊ฐ๋ฐํ๋ ๋์ ํ๋ก์ ํธ ์งํ์ ๋ฉ์ถ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์ ์์ง๋์ดB๋ ๊ธฐ๋ฅA์ ๊ฐ๋ฐ์ด ์๋ฃ๋๊ธฐ ์ ๊น์ง ๊ธฐ๋ฅB๋ฅผ ๊ฐ๋ฐํ ์ ์๋ค.
์ฑ๋ฅ๊ณผ ์์์ ํจ์จ๋ฉด์์ ๊ฐ์ฅ ์ฐ์ํ์ฌ ๋ง์ด ์ฐ์ด๋ ์กฐํฉ ์ค ํ๋์ด๋ค.
๐์์1
๋น๋๊ธฐ
๊ธฐ๋ฅ A๊ฐ ๋ฐ๋์ ๊ธฐ๋ฅB๋ณด๋ค ๋จผ์ ๊ฐ๋ฐ๋ ํ์๊ฐ ์๋ค.
๋ ผ๋ธ๋กํน
์์ง๋์ด A,B๊ฐ ๊ธฐ๋ฅ A,B๋ฅผ ๊ฐ๋ฐํ๋ ๋์ ํ๋ก์ ํธ๋ ๊ณ์ ์งํ๋๋ค. ๋ฐ๋ผ์ ๊ธฐ๋ฅA๋ฅผ ๊ฐ๋ฐํ๋ ๋์ค์ ์์ง๋์ดB๋ ๊ธฐ๋ฅB๋ฅผ ๊ฐ๋ฐํ ์ ์๋ค.
๐์์2
๋น๋๊ธฐ
์ดํ๋ฆฌ์ผ์ด์ ์ Read() ์์ ๊ณผ ์ปค๋์ Read IO ์์ ์์๊ฐ ๋ฐ๋ก ์ ํด์ง์ง ์๋๋ค.
๋ ผ๋ธ๋กํน
์ดํ๋ฆฌ์ผ์ด์ ์ ์ปค๋์๊ฒ Read IO์์ ์ ์์ฒญํ๊ณ ์ ์ด๊ถ์ ๋๊ธฐ์ง๋ง, ์ปค๋์ ์์ ์๋ฃ ์ฌ๋ถ์ ๊ด๊ณ์์ด ์ ์ด๊ถ์ ๋ฐํํ๋ค. ๊ทธ๋ฆฌ๊ณ ์ปค๋์ Read IO ์์ ์ด ์๋ฃ๋๋ฉด ๊ทธ ๊ฒฐ๊ณผ๋ฅผ ์ดํ๋ฆฌ์ผ์ด์ ์๊ฒ ๋ฐํํ๋ค.
Blocking, Non-blocking๊ณผ Sync, Async์ ๋ํ์ฌ
์ด์์ฒด์ -Synchronous์-Asynchronous-Blocking๊ณผ-Non-Blocking
๋๊ธฐ/๋น๋๊ธฐ์ย ๋ธ๋กํน/๋ ผ๋ธ๋กํน
๋๊ธฐ vs ๋น๋๊ธฐ, ๋ธ๋กํน vs ๋ ผ๋ธ๋กํน ์ฝ๊ฒ ์ดํดํ๊ธฐ
๋น๋๊ธฐ, ๋๊ธฐ, ๋ธ๋กํน, ๋ ผ๋ธ๋กํน์ ๊ฐ๋ ์ ๋ํด์ ์ค๋ช ํด์ฃผ์ธ์
๋น๋๊ธฐ, ๋๊ธฐ, ๋ธ๋กํน, ๋ ผ๋ธ๋กํน์ ๊ฐ ์กฐํฉ์ ํน์ง์ ๋งํด์ฃผ์ธ์
์ด๋ค ์กฐํฉ์ด ๊ฐ์ฅ ํจ์จ์ ์ด๋ผ ์๊ฐํ์๋์? ๊ทธ ์ด์ ๋?
์ด๋ค ์กฐํฉ์ด ๊ฐ์ฅ ๋นํจ์จ์ ์ด๋ผ ์๊ฐํ์๋์? ๊ทธ ์ด์ ๋?