๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ(Asynchronous)
๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ(Asynchronous Programming)์ ์คํํ ์ฝ๋์ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ณ๋์ ์ฑ๋์ ๊ฒฐ๊ณผ ์ฒ๋ฆฌ๋ฅผ ๋งก๊ธด ํ ๋ค์ ์์ ์ ๋ฐ๋ก ์งํํ๋ ๋ฐฉ์์ ํ๋ก๊ทธ๋๋ฐ์ ๋ปํ๋ค.
์ ํต์ ์ธ ์ ์ฐจ ์ค์ฌ์ ํ๋ก๊ทธ๋๋ฐ(Imperative Programming)์์๋ ์ฝ๋๋ฅผ ์คํ ํ ํ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ ธ๋ค ๋ฐ์์ ๋ค์์ผ๋ก ์งํํ๋ ๋ฐฉ์์ผ๋ก ์ฝ๋๋ฅผ ์คํํ๋ค.
๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ด์ ๋ฌ๋ฆฌ, ์ฝ๋์ ์คํ ๊ฒฐ๊ณผ ์ฒ๋ฆฌ ๋ฐ ํ์ฉ์ ๋ณ๋์ ์ฑ๋์ ๋งก๊ฒจ๋ ํ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ฐ๋ก ๋ค์ ์ฝ๋๋ฅผ ์คํํ๋ ๋ฐฉ์์ผ๋ก ํ๋ก๊ทธ๋จ์ ์งํํ๋ค.
์ฝ๋ ์คํ์ ๊ฒฐ๊ณผ๊ฐ ๋ค์ ์ฝ๋๋ค์์ ์ง์ ์ฐ๊ด์ด ์๋ ๊ฒฝ์ฐ ์คํ์ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆด ์ด์ ๊ฐ ์๊ธฐ ๋๋ฌธ์ ์์์ ๋ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ์ฌ์ง๊ฐ ์๊ธด๋ค.
๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์์๋ ํฌ๊ฒ ๋ ๊ฐ์ง ๋ฐฉ์์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํ๋ค.
- ํจ์ ์ ๋ฌ์ ํตํด ์ฒ๋ฆฌ(Callback)
- ์ธ์ด์์ ์ง์ํ๋ ๋ฐฉ์(Future, Promise)
ํน์ ํจ์๋ฅผ ํธ์ถํ์ฌ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ ํจ์๋ฅผ ๊ฐ์ฒ๋ผ ์ฌ์ฉํ๊ธฐ(First-class function)๋ฅผ ์ง์ํ๋ ์ธ์ด์์ ์์ฐ์ค๋ฝ๊ฒ ์ฌ์ฉํ๋ ๊ธฐ๋ฒ์ด๋ค.
๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ ๋ฐฉ์์ผ๋ก ์งํํ ์ฝ๋๋ฅผ ์คํํ ๋ ์คํ ํ๋์คํํ๋ ์์ ์ ๊ฒฐ๊ณผ๋ฅผ ์ฒ๋ฆฌํด ์ค ํจ์๋ฅผ ์ผ๊พผ์๊ฒ ๊ฐ์ด ๋๊ธฐ๋ ๊ธฐ๋ฒ์ผ๋ก, ์ผ๊พผ์ ์์ ํ ์ค์ ๊ฒฐ๊ณผ๋ฅผ ์คํ ์์ ์ ๋ฐ์ ํจ์๋ฅผ ํตํด ์ฒ๋ฆฌํ๋ค. ์ด ๋ฐฉ์์ ์ง๊ด์ ์ด๊ณ ์ผ๋ฐ์ ์ด์ง๋ง, ์คํํ๋ ์์ ์ ๋งค๋ฒ ํจ์๋ฅผ ๋๊ฒจ์ฃผ์ด์ผ ํ๋ ์ ์์ ์ฝ๋์ ์คํ ํ๋ฆ๊ณผ ๋ณ์์ ๋ฒ์๋ฅผ ๋์ผ๋ก ์ข๊ธฐ ํ๋ค๋๋ก ๋ง๋ ๋ค.
์ธ์ด์์ ์ง์ํ๋ ๋ฐฉ์์ ๊ฒฝ์ฐ ๋น๋๊ธฐ๋ก ์คํ ํ ์ฝ๋์ ๊ฒฐ๊ณผ๋ฅผ ์ธ์ด์์ ์ง์ํ๋ ๋ฐฉ์์ผ๋ก ๋๋๋ ค ๋ฐ์ ์ฒ๋ฆฌํ๋ ๋ฐฉ์์ด๋ค. ์ด ๋ฐฉ์์ ์ด์ฉํ๋ฉด ์ฝ๋๋ฅผ ๋น๋๊ธฐ๋ก ์คํํ ๋ ํด๋น ์ฝ๋์ ์ค์ ๊ฒฐ๊ณผ๊ฐ ์๋ ์ธ์ด์์ ์ง์ ํ ๋ฐฉ์์ผ๋ก ๊ฒฐ๊ณผ๋ฅผ ์ฆ์ ๋๋๋ ค ๋ฐ๋๋ค.
์ธ์ด์ ๋ฐฉ์์ ํตํด ์ฆ์ ๋๋๋ ค ๋ฐ๋ ๊ฒฐ๊ณผ๋ก๋ Future, Promise ๊ฐ์ ๊ฐ์ฒด ํํ, Python์ ์ฝ๋ฃจํด(Coroutine)๊ณผ ๊ฐ์ ์ธ์ด์ ๋ฌธ๋ฒ์ ์ด์ฉํ๋ ํํ, ๋๋ Go์ ๊ฐ์ด ๊ณ ๋ฃจํด(Goroutine) ๋๋ ๊ฒฐ๊ณผ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋ณ๋์ ์ฑ๋์ ์ฌ์ฉํ๋ ํํ ๋ฑ์ด ์๋ค. ์ฆ์ ๋๋๋ ค ๋ฐ์ ๊ฒฐ๊ณผ๋ฅผ ์ด์ฉํ์ฌ ๊ฐ ๋ฐฉ์์ ์๋ง๊ฒ ์ถํ์ ๋น๋๊ธฐ๋ก ์คํ ํ ์ฝ๋์ ์ค์ ๊ฒฐ๊ณผ๋ฅผ ๊บผ๋ด์ด ์ฌ์ฉํ๋ ํํ์ด๋ค.
๊ฐ์ฒด ํํ๋ก ๋๋ ค๋ฐ๋ ๊ฒฝ์ฐ๋ ์คํ ํ๋ฆ์ ํ๋ก๊ทธ๋จ์ผ๋ก ๊ตฌํํ์ฌ ๋ง์๊ป ๋ค๋ฅผ ์ ์๊ธฐ ๋๋ฌธ์ ๋์ ์์ ๋ฅผ ๋๋ฆด ์ ์์ง๋ง, ์ด๋ฅผ ์ํด ํ์ํ ์ฝ๋๋ฅผ ๋ ๊ตฌํํด์ผ ํ๋ ๋จ์ ์ด ์๋ค. ๋ฐ๋ฉด ์ธ์ด์ ๋ฌธ๋ฒ์ ์ด์ฉํ๋ ํํ๋ ์ธ์ด๊ฐ ์ ๊ณตํ๋ ์ ์ด๋ฌธ์ ํตํด ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์คํ ํ๋ฆ์ ์ธ์ด์ ์คํ ํ๋ฆ์ผ๋ก ๊ฐ์ ธ์ ์ฝ๋๋ฅผ ์์ฑํ๊ฒ ํ์ง๋ง, ๋น๋๊ธฐ ์คํ์ ์ธ์ด์ ํน์ ๋ฌธ๋ฒ์ ์ ํํด ๋ฒ๋ฆฐ๋ค๋ ํ๊ณ๊ฐ ์๋ค.
๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์์ ๊ฐ์ฅ ์ค์ํ ์์ ์ค ํ๋๋ ๋น๋๊ธฐ ๊ธฐ๋ค๋ฆฌ๊ธฐ(Asynchronous Wait ๋๋ ์ค์ฌ์ Await)์ด๋ค.
ํ๋ก๊ทธ๋จ์ ๋ง๋ค๋ค ๋ณด๋ฉด, ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ์คํ ํ๋ ์์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ค์ ์ต์ด์ ์คํ ํ๋ฆ์ผ๋ก ๋๊ฐ์ ธ์ ์ฌ์ฉํด์ผ ํ๋ ๊ฒฝ์ฐ๊ฐ ์๊ธด๋ค.
์ด๋ ๋น๋๊ธฐ ๊ธฐ๋ค๋ฆฌ๊ธฐ๋, ๊ธฐ์กด์ ์คํ ํ๋ฆ์์ ํ์ํ ๊ฒฐ๊ณผ๋ฅผ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ์คํํ ์์ ์์ ๋ง๋ค์ด๋ผ ๋๊น์ง ๊ธฐ๋ค๋ ค ๋ ์์ ๊ฐ ํ์ด๋ฐ์ ๋ง์ถ์ด ์ฃผ๋ ์ญํ ์ ํ๋ค. ๋ํ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ์คํ ์ค์ธ ์์ ์ด ์์ผ๋ ํจ์๋ฅผ ๋๋ด์ง ์๊ณ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐฉ์์ผ๋ก ์ฌ์ฉํ ์๋ ์๋ค. ๋น๋๊ธฐ ๊ธฐ๋ค๋ฆฌ๊ธฐ๋ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ผ๋ก ์คํํ ์์ ๊ณผ ์๋ ์คํ ํ๋ฆ ๋ฌถ์ด์ฃผ๋ ์ค์ํ ๊ธฐ๋ฒ์ด๋ฉฐ, ๋๋ถ๋ถ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ - ๋น๋๊ธฐ ๊ธฐ๋ค๋ฆฌ๊ธฐ๋ฅผ ํ ์์ผ๋ก ๋๊ณ ๋น์ฐํ ๋ฐ๋ผ์ค๋ ๊ฐ๋ ์ผ๋ก ์๊ฐํ๋ค.
ํนํ ์ ์ฐจ ์ค์ฌ์ ์ธ์ด์์๋ ๋น๋๊ธฐ ๊ธฐ๋ค๋ฆฌ๊ธฐ๋ฅผ ํตํด ์คํ ํ๋ฆ์ ์ ์ดํ๋ ๊ฒ์ ์์ฐ์ค๋ฌ์ด ๋ฐฉ์์ด๋ค.
์ธ์ด์ ๋ฐฉ์์ธ Future ๊ฐ์ฒด, Promise ๊ฐ์ฒด, ์ฝ๋ฃจํด(Coroutine)๋ฌธ๋ฒ, ๊ณ ๋ฃจํด(Goroutine) ๋ฌธ๋ฒ ๋ฑ์ ์ด์ฉํ์ฌ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๋ ์ธ์ด๋ค์ ๋น๋๊ธฐ ๊ธฐ๋ค๋ฆฌ๊ธฐ๋ฅผ ์ ๊ณตํ๋ค.
์ค๋ก์ง Java๋ง ์ ์ฐจ ์ค์ฌ์ ํ๋ก๊ทธ๋๋ฐ์ด๋ฉด์๋ ์์ง๊น์ง ๋น๋๊ธฐ ๊ธฐ๋ค๋ฆฌ๊ธฐ๊ฐ ์๋ค.
๋น๋๊ธฐ ๊ธฐ๋ค๋ฆฌ๊ธฐ๋ ๊ต์ฐฉ ์ํ(Deadlock) ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ฌ์ง๊ฐ ์๊ณ , ์ถ์ํ์ ์์ค์ ์ ์ฐจ ์ค์ฌ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ์์ค์ผ๋ก ๋ฎ์ถ๋ ์ฃผ๋ ์์ธ์ด๋ค.
๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ง์ํ๋ ๊ฑฐ์ ๋ชจ๋ ์ธ์ด์์ ๋น๋๊ธฐ ๊ธฐ๋ค๋ฆฌ๊ธฐ๊ฐ ํ์์ธ ๊ฒ์ ์ด๊ฒฌ์ด ์๋ ์ฌ์์ด๋ฉฐ ์์ฃผ ์ค์ํ ํต์ฌ ์์ ์ค ํ๋์ด๋ค.
ํ์ง๋ง ์ด๋ ์ฌ์ฉํ๊ธฐ์ ๋ฐ๋ผ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ ์ฐจ ์ค์ฌ์ ํ๋ก๊ทธ๋๋ฐ ๊ด์ ์ผ๋ก ๋๋๋ ค ์์ ์คํ ํ๋ฆ ์ ์ด์ ๋ช์ ๋น ์ง๊ฒ ๋ง๋ค๊ธฐ๋ ํ๋ค.
๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ๊ธฐ๋ฅ์ ์ ์ฐจ ์ค์ฌ์ ํ๋ก๊ทธ๋๋ฐ์ด ๊ฐ์ง๋ ์ถ์ํ ์์ค์ ๋ง์ถ์ด ์ฌ์ฉํ ์ ๋ฐ์ ์๊ฒ ๋๋ ๋ฌธ์ ์ด์ธ์๋ ์ฌ์ฉ์์ ์ญ๋์ ๋ฐ๋ผ ์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ์ฌ์ง๊ฐ ํฌ๊ฒ ๋ฌ๋ผ์ง๋ค๋ ๋ฌธ์ ๊ฐ ์๋ค. ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ถ์ํ ์์ค์ ๋์ด๋ ๊ณ์ฐ ๋ชจ๋ธ ๋๋ ํ๋ก๊ทธ๋๋ฐ ๋ชจ๋ธ์ ์ฌ์ฉํ๋ฉด ์คํ ํ๋ฆ์ ์ง์ ์ ์ดํ๋ ์ผ ์ ์ฐจ ์ค์ฌ์ ํ๋ก๊ทธ๋๋ฐ ๊ด์ ์์ ๋ฒ์ด๋ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ฅ์ ๋ง์ ์จ์ ํ ๋๋ฆด ์ ์๋ค.
๋์ ์์ค์ ์ถ์ํ๋ฅผ ์ ๊ณตํ๋ ๊ธฐ๋ฒ์ ์ด์ฉํ์ฌ ์คํ ํ๋ฆ์ ์ง์ ์ ์ดํ๋ ๊ณ ํต์์ ๋ฒ์ด๋๋ฉด ๊ต์ฐฉ ์ํ์ ๋น ์ง ์ํฉ์ ํผํ ์ ์์ผ๋ฉฐ, ์ฌ์ฉ์์ ์ญ๋๊ณผ ์๊ด์์ด ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ด ์ ๊ณตํ๋ ํจ์จ์ ์์ ์ฌ์ฉ์ ์จ์ ํ ๋๋ฆด ์ ์๋ค.
Haskell, Scala, ๋๋ OCaml ๊ฐ์ ํจ์ ์ค์ฌ์ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด์์๋ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ํ๋ฆ ์ ์ด๋ฅผ ๋ชจ๋๋(Monad)๋ฅผ ์ด์ฉํ์ฌ ํจ์๋ฅผ ์ฎ์ด๋๊ฐ๋ ๋ฐฉ์์ผ๋ก ์ถ์ํ ์์ค์ ๋์ฌ ์ฌ์ฉํ ์ ์๋ค.
๋๋ ๋ฐ์ํ๋ ํ๋ก๊ทธ๋๋ฐ(Reactive Programming)์ ์ด์ฉํ์ฌ ํ๋ก๊ทธ๋๋ฐ์ ๊ด์ ์ ์ ์ฐจ ์ค์ฌ์ด ์๋๋ผ ๋ฐ์ดํฐ์ ํ๋ฆ์ผ๋ก ๋ฐ๊พธ์ด์ ์คํ ํ๋ฆ์ ๋ฐ์ดํฐ ํ๋ฆ์ ๋ง์ถ์ด ๋ฐ๋ผ๊ฐ๋๋ก ํ๋ ๋ฐฉ์์ผ๋ก ์ถ์ํ ์์ค์ ๋์ฌ ์ฌ์ฉํ ์ ์๋ค.
๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ๋์์ฑ(Concurrency), ๋ฉ์ถ์ง ์๊ณ ๊ธฐ๋ค๋ฆฌ๊ธฐ(Non-Blocking I/O)์ ๋งค์ฐ ํก์ฌํ ๊ฐ๋ ๊ฐ์ ๋ณด์ด์ง๋ง ๋ ๋ฆฝ๋ ์ ์๋ก ๋ค๋ฃจ์ด์ผ ํ๋ค.
๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ‘๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค์ ์ฝ๋๋ฅผ ์คํํ๋ ํ๋ฆ’์ ๋ํํ๋ ๊ฐ๋ ์ด๋ค.
์ด๋ฅผ ๊ตฌํํ๊ธฐ ์ํด ์ฌ๋ฌ ์ผ๊พผ์ ์ฌ์ฉํ์ฌ ์คํํ๋๋ก ํ๋ ์ผ๊พผ ํ๋์ ์์ ์ ์์๋ฅผ ์กฐ์ ํ์ฌ ์คํํ๋๋ก ํ๋ , ์ด๋ป๊ฒ ๊ตฌํํ ์ง๋ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ๊ณผ ์ฐ๊ด์ด ์์์ง์ธ์ ์ ์์ ๊ตฌ์ฑ ์์๋ผ๊ณ ๋ณผ ์๋ ์๋ค.
๋ฌผ๋ก ์ผ๋ฐ์ ์ผ๋ก ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ๋ณ๋ ฌ์ฑ(Parallelism)๊ณผ ๋์์ฑ ๋ชจ๋๋ฅผ ํ๋ณดํ ๊ตฌํ์ฒด๋ฅผ ํตํด ์ฝ๋๋ฅผ ์งํํ์ง๋ง ๊ทธ๋ ์ง ์๊ณ ๋ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ ๊ณตํ๋ ๊ฒ์ ์ฌ์ ํ ๊ฐ๋ฅํ๋ค.
ํ ๊ฐ์ง ์๋ก, ์ด๋ฒคํธ ๋ฃจํ(Event Loop)๋ฅผ ์ฌ์ฉํ์ฌ ๋ณ๋ ฌ์ฑ์ ํ๋ณดํ์ง ์๊ณ ์ค์ง ๋์์ฑ๋ง ์ผ๋ก ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ ๊ณตํ๋ ๋ฐฉ์์ด ์๋ค.
๋๋, ํจ์๋ฅผ ์ ๋ฌํ์ฌ ์ฒ๋ฆฌํ๊ธฐ(Callback) ๋ฐฉ์์ ์ฌ์ฉํ์ฌ ๋์์ฑ ์์ด ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ ๊ณตํ ์๋ ์๋ค.
ํ์ง๋ง ๊ทธ๊ฒ์ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ ์ฝ๋ ์งํ์ ๊ตฌํํ๋ ๊ตฌํ ๋ฐฉ์๋ค ์ค ํ๋์ผ ๋ฟ์ด์ง ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ์ด ๋ณ๋ ฌ์ฑ, ๋์์ฑ ๋๋ ๋ฉ์ถ์ง ์๊ณ ๊ธฐ๋ค๋ฆฌ๊ธฐ์ ์ข ์๋ ๊ฐ๋ ์ ์๋๋ค.
์ ์ถ๋ ฅ์ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐฉ์ (Blocking & Non-Blocking)
์ ์ถ๋ ฅ์ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐฉ์์ ํฌ๊ฒ ๋ฉ์ถ๊ณ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐฉ์(Blocking I/O)๊ณผ ๋ฉ์ถ์ง ์๊ณ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐฉ์(Non-Blocking I/O)์ด ์๋ค. ํ๋ก๊ทธ๋จ์ด ์ธ๋ถ์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ์ ๋, ๋ฐ์ดํฐ๋ฅผ ์ฒ๋ฆฌํ๋ ๋์ ๊ฐ๋งํ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ Blocking I/O, ๋ค๋ฅธ ์ผ์ ํ๋ฉฐ ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ Non-Blocking I/O์ด๋ผ๊ณ ํ๋ค.
Blocking I/O ๊ฒฝ์ฐ, ์ธ๋ถ์์ ์์ ์ ์งํํ๋ ๋์ ํ๋ก๊ทธ๋จ ์์์ ์ธ๋ถ ์์ ์ด ๋๋๊ธฐ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋๋ฐ์ ์๋นํ๋ค.
๋ฐ๋ฉด์ Non-Blocking ๊ฒฝ์ฐ, ์ธ๋ถ์์ ํ์ํ ์์ ์ ํ๋ ๋์ ํ๋ก๊ทธ๋จ์ ๋ค๋ฅธ ์ผ์ ํ ์ ์๋ค.
๋ฐ๋ผ์ Non-Blocking ๋ฐฉ์์ ์ด์ฉํ๋ฉด ๊ฐ๋ฐ์์ ์ญ๋์ ๋ฐ๋ผ ํ๋ก๊ทธ๋จ์ ์์์ ํจ์ฌ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์๋ ์ฌ์ง๊ฐ ์๋ค. ๋ค๋ง, Blocking ๋ฐฉ์์ ์ฌ์ฉํ ๊ฒฝ์ฐ ํ๋ก๊ทธ๋จ๊ณผ ์ธ๋ถ ์์ ์ฌ์ด์ ๋ฐ์ดํฐ๋ฅผ ์ฃผ๊ณ ๋ฐ๊ธฐ ์ํ ์ฝ์์ด ํ์ํ๋ค.
Blocking ๋ฐฉ์์ ์ธ๋ถ ์์ ์ ๊ฒฐ๊ณผ๋ฅผ ๋ฉ์ถ์ด์ ๊ธฐ๋ค๋ฆฌ๊ธฐ ๋๋ฌธ์ ๊ทธ ์๋ฆฌ์์ ๋ฐ๋ก ๋ฐ์ ์ ์๋ค. ๋ฐ๋ฉด์ Non-Blocking ๋ฐฉ์์ ๊ฒฐ๊ณผ๋ฅผ ์ป์ด ์ค๊ธฐ ๊น์ง ๋ฉ์ถ์ด ์๋ ๊ฒ์ด ์๋๋ผ ๋ค๋ฅธ ์ผ์ ํ๋ค ๋์ค์ ๊ฒฐ๊ณผ๋ฅผ ์ฌ์ฉํ๋ ๊ฒ์ด ๊ฐ๋ฅํด์ก์ ๋ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์์ ์ฌ์ฉํ๋ ๋ฐฉ์์ด๋ค. ๋ค๋ง, Non-Blocking์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ ํ๋ก๊ทธ๋จ์ ์์ ์ ํ์ฌ ๋งฅ๋ฝ๊ณผ ์๊ด์์ด ์ธ๋ถ ์์ ๊ณผ ๋ฐ์ดํฐ๋ฅผ ๊ณต์ ํ ๋ฐฉ๋ฒ์ด ํ์ํ๊ณ ์ด๋ฅผ ์ํ ์ถ๊ฐ ๊ตฌํ์ด ํ์ํ๋ค.
์ด๋ ๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ ๋ฐ๋ผ Non-Blocking์ ๋ค์ ๋ ๋ถ๋ฅ๋ก ๋๋๊ธฐ๋ ํ๋ค. ์ ์ถ๋ ฅ์ ๋ฉ์ถ์ง ์๊ณ ๊ธฐ๋ค๋ฆฌ๋ ๋ฐฉ์ ์ค, ์ฃผ๋์ ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ์(Pull Base)์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ฅผ ๋ฉ์ถ์ง ์๊ณ ๊ธฐ๋ค๋ฆฌ๊ธฐ(Non-Blocking I/O)๋ผ ๋ถ๋ฅธ๋ค. ๋ฐ๋๋ก ์๋์ ์ผ๋ก ๋ฐ์์ค๋ ๋ฐฉ์(Push Base)์ ์ฌ์ฉํ๋ ๊ฒฝ์ฐ๋ฅผ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ์ ์ถ๋ ฅ ๊ธฐ๋ค๋ฆฌ๊ธฐ(Asynchronous I/O)๋ผ ๋ถ๋ฅธ๋ค. ์ผ๋ฐ์ ์ผ๋ก ์๋์ ์ผ๋ก ๋ฐ์์ค๋ ๋ฐฉ์์ด ์์์ ํจ์ฌ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ ์ ์ง๋ง, ์ฃผ๋์ ์ผ๋ก ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ ๋นํด ๊ตฌํํด์ผ ํ๋ ์ฝ๋๊ฐ ๋ง๊ณ ๋ณต์กํ ๋จ์ ์ด ์๋ค.
๊ฒฐ๊ณผ๋ฅผ ๊ฐ์ ธ์ค๋ ๋ฐฉ์์ ๋ฐ๋ผ ๋ค์ ๋ ๋ถ๋ฅ๋ก ๋๋๋๋ผ๋, ๋ณธ์ง์ ์ฌ์ ํ ์ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ์ํํ๋ ๊ณผ์ ๋์ ์ผํ๊ธฐ๋ฅผ ๋ฉ์ถ์ง ์๊ณ ๊ธฐ๋ค๋ฆฐ ๋ค๋ ์ ์ด๋ค. ๋ฐ๋ผ์ ์ด ๊ธ์์๋ ๋ ผ์๋ฅผ ๋จ์ํ๊ฒ ํ๊ธฐ ์ํด ์ ์ถ๋ ฅ์ ๋ค๋ฃจ๋ ๋ฐฉ์์ ๋ํ ๋ ผ์๋ ์ฒ์๊ณผ ๋ง์ฐฌ๊ฐ์ง๋ก ์ค๋ก์ง ๋ฉ์ถ๊ณ ๊ธฐ๋ค๋ฆฌ๊ธฐ์ ๋ฉ์ถ์ง ์๊ณ ๊ธฐ๋ค๋ฆฌ๋ ๋ ๋ถ๋ฅ๋ก๋ง ๋๋ ๊ฒ์ด๋ค. ์ด๋ ์ดํ ๋ฑ์ฅํ ๊ฐ๋ ์ธ ๋น๋๊ธฐ ํ๋ก๊ทธ๋๋ฐ(Asynchronous Programming)์ ๋น๋๊ธฐ ๊ธฐ๋ค๋ฆฌ๊ธฐ(Asynchronous Wait)๊ฐ ๋น๋๊ธฐ ๋ฐฉ์์ผ๋ก ์ ์ถ๋ ฅ ๊ธฐ๋ค๋ฆฌ๊ธฐ ์ฌ์ด์ ํผ๋์ ์ค์ด๊ธฐ ์ํ ๊ฒ์ด๊ธฐ๋ ํ๋ค.
I/O ๋ชจ๋ธ
์์ํ๊ธฐ ์ ์ ์๋์ ๋ป์ ์๊ณ ๋์ด๊ฐ์.
์ฌ์ฉ์ ๋จ๊ณ์ ํ๋ก์ธ์ค๋ I/O ์์ ์ ์ง์ ์ํํ ์ ์์ผ๋ฉฐ ์ปค๋์๊ฒ ์์ฒญํด์ผ ํ๋ค.
์ด์์ฒด์ ๊ฐ ์ ๊ณตํ๋ ์๋น์ค ํธ์ถ ํจ์๋ฅผ ์์คํ ํธ์ถ์ด๋ผ๊ณ ํ๋ค.
์๋๋ ๊ด๋ จ ๋ด์ฉ์ผ๋ก ์ ๋ช ํ IBM DeveloperWorks 2x2 ๋งคํธ๋ฆญ์ค ์ด๋ฏธ์ง์ด๋ค.
๋๊ธฐ์ ๋น๋๊ธฐ๋ ํ๋ก์ธ์ค์ ์ํ ์์ ๋ณด์ฅ์ ๋ํ ๋งค์ปค๋์ฆ์ด๊ณ ๋ธ๋กํน๊ณผ ๋ ผ ๋ธ๋กํน์ํ๋ก์ธ์ค์ ์ ํด ์ํ์ ๋ํ ๊ฐ๋ ์ผ๋ก ์์ ํ ๋ณ๊ฐ์ ๊ฐ๋ ์ด๋ค.
Blocking&Non-Blocking
Blocking&Non-Blocking์ ๊ด์ฌ์ฌ๋ ํธ์ถ๋๋ ํจ์๊ฐ ๋ฐํ๋๋์ง์ ๋ํ ์ฌ๋ถ์ด๋ค.
- Blocking : ์ฌ์ฉ์ ํ๋ก์ธ์ค๊ฐ ์์คํ ํธ์ถ์ ํ๊ณ ๋ ๋ค์ ๊ฒฐ๊ณผ๊ฐ ๋ฐํ๋๊ธฐ๊น์ง ๋ค์ ์ฒ๋ฆฌ๋ก ๋์ด๊ฐ์ง ์๊ณ ๋๊ธฐํ๋ ์ํ์ด๋ค. (A ๊ฐ B๋ฅผ ํธ์ถํ์์ ๋, B ๊ฐ ์๋ฃ๋๊ธฐ ์ ๊น์ง ๋๊ธฐ ์ํ ํ ์๋ฃ ์์ ๋ฐํ)
- Non-Blocking : ์ฌ์ฉ์ ํ๋ก์ธ์ค๊ฐ ์์คํ ํธ์ถ์ ํ๊ณ ๋ ๋ค์ ์ ์ด๊ถ์ ๋๋ ค๋ฐ์ ์๋ต์ ๊ธฐ๋ค๋ฆฌ์ง ์๊ณ ๋ค์ ์ผ์ ์งํํ๋ค. (A ๊ฐ B๋ฅผ ํธ์ถํ์์ ๋, B ๊ฐ ์๋ฃ๋์ง ์๋๋ผ๋ ๋ฐํ)
Synchronous&Asynchronous
Synchronous&Asynchronous ๊ด์ฌ์ฌ๋ ์ด๋ ํ ์์๋ฅผ ๊ฐ์ง๊ณ ์คํ๋๋์ง์ ๋ํ ์ฌ๋ถ์ด๋ค. ๋๋ถ์ด, ํ์ฌ ์์ ์ ์๋ต๊ณผ ๋ค์ ์์ ์ ์์ฒญ์ด ์ผ์นํ๋๋๊ฐ ๋ ๊ฒ์ด๋ค.
- Synchronous : ์์ ์ ์์ฒญํ ํ ๊ฒฐ๊ณผ๊ฐ ๋์ฌ ๋๊น์ง ๊ธฐ๋ค๋ฆฐ ํ ์ฒ๋ฆฌํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์, ๊ฒฐ๊ณผ ์๊ฐ๊ณผ ๋ฐํ๋๋ ์๊ฐ์ด ๋์ผํ๋ค.
- Asynchronous : ์์ฒญํ ์์ ์ ๋ํ ์๋ฃ ์ฌ๋ถ๋ฅผ ์ ๊ฒฝ ์ฐ์ง ์๊ณ , ๋ค์ ์์ ์ ์งํํ๋ค. ๊ทธ๋ ๊ธฐ ๋๋ฌธ์, ๊ฒฐ๊ณผ ์๊ฐ๊ณผ ๋ฐํ ์๊ฐ์ด ๋ค๋ฅด๋ค.
Synchronous blocking I/O
๊ฐ์ฅ ๊ธฐ๋ณธ์ ์ธ I/O ๋ชจ๋ธ์ด๋ค.
ํ์ผ์ ์ฝ๊ณ ์ฐ๋ ์ผ๋ฐ์ ์ธ read(), write()์ ๊ฐ์ I/O ์์คํ ํธ์ถ์ ์๋ฏธํ๋ค. (ํน๋ณํ ์ค์ ์ด ์์ผ๋ฉด blocking์ผ๋ก ๋์ํ๋ค)
์ฌ์ฉ์ ํ๋ก์ธ์ค๊ฐ read()๋ฅผ ํธ์ถํ ํ ์ด์์ฒด์ (์ปค๋)๋ ๋ฐ์ดํฐ๊ฐ ์ฌ์ฉ์ ๋ฒํผ์ ๋ณต์ฌ๋๊ธฐ ์ ๊น์ง ๋ฐํํ์ง ์์ผ๋ฉฐ, ์ฌ์ฉ์ ํ๋ก์ธ์ค๋ ์์ ์ ์์ ์ ์ค๋จํ ์ฑ ๋๊ธฐํ๋ค.
์ด๋ฌํ ๋ถ๋ถ์์ ์ฌ๋ฌ ํด๋ผ์ด์ธํธ๊ฐ ํ๋์ ํ๋ก์ธ์ค(๋๋ ์ค๋ ๋)๋ฅผ ์งํํ๊ธฐ ์ํด์๋ ํ๋์ ์์ ์ด ๋๋ ๋๊น์ง ๋๊ธฐํด์ผํ๋ฏ๋ก, ํด๋ผ์ด์ธํธ ๋ณ๋ก ํ๋ก์ธ์ค(๋๋ ์ฐ๋ ๋)๋ฅผ ๋ง๋ค์ด ์ฐ๊ฒฐ์์ผ์ผ ํ๋ค.
๊ทธ๋ฌ๋ฏ๋ก, ํด๋ผ์ด์ธํธ ๋ณ๋ก ํ๋ก์ธ์ค(๋๋ ์ฐ๋ ๋) ์๊ฐ ์ฆ๊ฐํ๋ฉด์ CPU ๋ฑ์ ์์ ๋ญ๋น๊ฐ ๋๋ค. (ex. ์ ์์ ์๊ฐ ๋ง์์ง ๊ฒฝ์ฐ)
ํธ์ถ ์์ฉ ํ๋ก๊ทธ๋จ์ CPU๋ฅผ ์๋นํ์ง ์๊ณ ๋จ์ํ ์๋ต์ ๊ธฐ๋ค๋ฆฌ๋ ์ํ์ด๋ฏ๋ก ์ฒ๋ฆฌ ๊ด์ ์์ ํจ์จ์ ์ด๋ค.
๊ทธ๋ฌ๋ ์ค์ ๋ก๋ ์์ฉ ํ๋ก๊ทธ๋จ์ด ์ค์ ๋ก blocking ๋๊ณ , ์ฝ๊ธฐ๋ ์ปค๋์ ๋ค๋ฅธ ์์ ๊ณผ ๋ค์คํ๋๋ค.
Synchronous non-blocking I/O
์ด์์ฒด์ (์ปค๋)๋ data๋ฅผ ์ฝ์ ํ ๋ฒํผ์ ์ ์ฅํ๊ณ ๊ทธ ๋ด์ฉ์ ์ฌ์ฉ์์๊ฒ ๋ณต์ฌํด์ค๋ค.
๋ฒํผ๋ ์ปค๋์ด ๊ฐ์ง๊ณ ์๋ ๋ฉ๋ชจ๋ฆฌ์ ์ ์ฌ๋๋ฏ๋ก ๋ฉ๋ชจ๋ฆฌ ๊ฐ์ ๋ณต์ฌ๊ฐ ์ผ์ด๋ I/O ๋ณด๋ค ๋น ๋ฅธ ์๋๋ก ๋ฐ์์ฌ ์ ์๋ค.
๊ทธ๋ฌ๋ ๋ฒํผ๊ฐ ๋น์ด์๋ค๋ฉด ์ปค๋์ ์ฆ์ ์๋ฌ ์ฝ๋(EAGAIN ๋๋ EWOULDBLOCK)๋ฅผ ๋ฐํํ์ฌ, ์ฌ์ฉ์ ํ๋ก์ธ์ค๊ฐ ์ง์์ ์ผ๋ก read()๋ฅผ ํธ์ถํ์ฌ I/O ์ค๋น์ฌํญ์ ์ฒดํฌํ๋๋ก ํ๋ค.(polling ๋ฐฉ์)
์ด์ ๋ฐ๋ณต์ ์ผ๋ก ์์คํ ํธ์ถ์ด ์ผ์ด๋๋ฏ๋ก CPU ๋ฑ์ ์์์ด ๋ญ๋น๋๋ค.
Non-blocking ์๋ฏธ๋ I/O ๋ช
๋ น์ด ์ฆ์ ์ถฉ์กฑ๋์ง ์์ ์ ์์ผ๋ฏ๋ก ์์ฉ ํ๋ก๊ทธ๋จ์ด ์๋ฃ๋ฅผ ๋๊ธฐํ๊ธฐ ์ํด ์๋ง์ ํธ์ถ์ ์ํํด์ผ ํ๋ค๋ ๊ฒ์ด๋ค.
์์ฉ ํ๋ก๊ทธ๋จ์ด ๋ฐ์ดํฐ๋ฅผ ์ฌ์ฉํ ์ ์์ ๋๊น์ง ๋๊ธฐ ์ค์ด๊ฑฐ๋ ๋ช
๋ น์ด ์ปค๋์์ ์ํ๋๋ ๋์ ๋ค๋ฅธ ์์
์ ์๋ํด์ผ ํ๊ธฐ ๋๋ฌธ์ ์ด๋ ๋งค์ฐ ๋นํจ์จ์ ์ผ ์ ์๋ค.
Asynchronous blocking I/O
select์ poll๊ณผ ๊ฐ์ ์์คํ ํธ์ถ์ ์ด์ฉํ์ฌ I/O Multiplexing ํ๊ธฐ ์ํ ๋ชฉ์ ์ผ๋ก ์ฌ์ฉ๋๋ค.
์ฆ, ํ๋์ ํต์ ์ฑ๋์ ํตํด์ ๋ ์ด์์ ๋ฐ์ดํฐ(์๊ทธ๋)๋ฅผ ์ ์กํ๋ฉฐ, ๋ฌผ๋ฆฌ์ ์ฅ์น์ ํจ์จ์ฑ์ ๋์ด๊ธฐ ์ํด ์ต์ํ์ ์์๋ง ์ฌ์ฉํ์ฌ ์ต๋ํ์ ๋ฐ์ดํฐ๋ฅผ ์ ๋ฌํ๋ค. (์ฌ๋ฌ ํ์ผ descriptor๋ฅผ ํ๋์ ํ๋ก์ธ์ค๋ก ๊ด๋ฆฌ)
select์ poll์ ์ฌ๋ฌ ๊ฐ์ descriptor์์ ๋ฐ์ดํฐ๊ฐ ์ค๋น๋์๋์ง ๊ฒ์ฌ๋ฅผ ์ํํ์ฌ ์ค๋น๊ฐ ๋ descriptor ๊ฐ ๋ฐ๊ฒฌ๋ ๊ฒฝ์ฐ ๋ฐํํ์ฌ ์ฌ๋ฌ ๊ฐ์ I/O ๋ฅผ ์ฒ๋ฆฌํ ์ ์๋ค.
๋ค๋ง, select๋ ๊ด๋ฆฌ file descriptor ์์ ์ ํ์ด ์๊ณ , poll ์ ์ ํ์ ์์ผ๋ file descriptor ๋น ์ฒดํฌ ๋ง์คํฌ์ ํฌ๊ธฐ๊ฐ ์ปค์ ์ ์์ ์๊ฐ ๋์ด๋๋ฉด ์ฑ๋ฅ์ด ๋จ์ด์ง๋ค.
select call์ ์ฃผ์ ๋ฌธ์ ๋ ํจ์จ์ ์ด์ง ์๋ค๋ ๊ฒ์ด๋ค.
asynchronous notification์ ํธ๋ฆฌํ ๋ชจ๋ธ์ด์ง๋ง ๊ณ ์ฑ๋ฅ I/O์ ์ฌ์ฉํ๋ ๊ฒ์ ๊ถ์ฅํ์ง ์๋๋ค.
์ถ๊ฐ์ ์ผ๋ก, ์๋์ ๊ฐ์ ์ด์ ๋๋ฌธ์ IBM ๋ธ๋ก๊ทธ์ ๋ด์ฉ์ด ์๋ชป๋์ด ์๋ค ๋ผ๋ ์๊ฒฌ๋ ์์ผ๋ ์ฐธ๊ณ ํ๋ฉด ์ข๊ฒ ๋ค.
Asynchronous non-blocking I/O (AIO)
๋ง์ง๋ง์ผ๋ก Asynchronous non-blocking I/O ๋ I/O์์ ์ค๋ณต ์ฒ๋ฆฌ ์ค ํ๋์ด๋ค.
์ฝ๊ธฐ ์์ฒญ์ด ์ฆ์ ๋ฐํ๋์ด ์ฝ๊ธฐ๊ฐ ์ฑ๊ณต์ ์ผ๋ก ์์๋์์์ ๋ํ๋ธ๋ค.
๊ทธ๋ฐ ๋ค์ application ์ ๋ฐฑ๊ทธ๋ผ์ด๋ ์ฝ๊ธฐ ์กฐ์์ด ์๋ฃ๋๋ ๋์ ๋ค๋ฅธ ์ฒ๋ฆฌ๋ฅผ ์ํํ ์ ์๋ค.
์ฝ๊ธฐ ์๋ต์ ๋๋ฌํ๋ฉด ์ ํธ ๋๋ ์ค๋ ๋ ๊ธฐ๋ฐ ์ฝ๋ฐฑ์ ์์ฑํ์ฌ I/O ํธ๋์ญ์
์ ์๋ฃํ ์ ์๋ค.
์ฌ๋ฌ I/O ์์ฒญ์ ๋ํด ๋จ์ผ ํ๋ก์ธ์ค์์ ๊ณ์ฐ ๋ฐ I/O ์ฒ๋ฆฌ๋ฅผ ๊ฒน์น๋ ๊ธฐ๋ฅ์ ์ฒ๋ฆฌ ์๋์ I/O ์๋ ๊ฐ์ ๊ฒฉ์ฐจ๋ฅผ ์ด์ฉํ๋ค.
ํ๋ ์ด์์ ๋๋ฆฐ I/O ์์ฒญ์ด ๋ณด๋ฅ ์ค์ธ ๋์ CPU๋ ๋ค๋ฅธ ์์
์ ์ํํ๋ ๊ฒ๋ณด๋จ ์ผ๋ฐ์ ์ผ๋ก ๋ค๋ฅธ I/O ๊ฐ ์์๋๋ ๋์ ์ด๋ฏธ ์๋ฃ๋ I/O ์์ ์๋ํ ์ ์๋ค.
๋น๋๊ธฐ ์ ์ถ๋ ฅ
AIO์ ๊ธฐ๋ณธ ๊ฐ๋ ์ ํ๋ก์ธ์ค๊ฐ ์๋ฃ๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๊ฑฐ๋ ๊ธฐ๋ค๋ฆด ํ์ ์์ด ํ๋ก์ธ์ค๊ฐ ๋ง์ I/O ์์ ์ ์์ํ ์ ์๋๋ก ํ๋ ๊ฒ์ด๋ค. ๋์ค์ ๋๋ I/O ์๋ฃ ํต์ง๋ฅผ ๋ฐ์ ํ ํ๋ก์ธ์ค๋ I/O ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ํ ์ ์๋ค.
์ปดํจํฐ ๊ณผํ์์ ๋น๋๊ธฐ ์ ์ถ๋ ฅ(Asynchronous I/O) ๋๋ ๋น์์ฐจ ์ ์ถ๋ ฅ(non-sequential I/O)์ ๋ฐ์ดํฐ ์ ์ก์ ๋ง์น๊ธฐ ์ ์ ๊ธฐํ ํ๋ก์ธ์ค๊ฐ ๊ณ์ํ๋๋ก ํ๊ฐํ๋ ์ ์ถ๋ ฅ ์ฒ๋ฆฌ์ ํ ํํ์ด๋ค.
์ปดํจํฐ์์์ ์ ์ถ๋ ฅ ๊ธฐ๋ฅ์ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ ๋ณด๋ค ์๋นํ ๋๋ฆด ์ ์๋ค. ๋ชจ๋ ์ ์ถ๋ ฅ ์ฅ์น๋ ์ฝ๊ธฐ๋ ์ฐ๊ธฐ๋ฅผ ์ํด ํธ๋์ ์ฐพ๋ ํ๋ ๋๋ผ์ด๋ธ์ ๊ฐ์ด ๋ฌผ๋ฆฌ์ ์ผ๋ก ์์ง์ฌ์ผ ํ๋ ๊ธฐ๊ณ ์ฅ์น๋ฅผ ํฌํจํ ์ ์๋ค. ์ฆ, ์ ๊ธฐ ํ๋ก๋ฅผ ์ ํํ๋ ๊ฒ๋ณด๋ค ์ข ์ข ๋ ๋๋ฆฌ๋ค. ์ด๋ฅผํ ๋ฉด, ๋์คํฌ ์์ ์ํ์ 10 ms๊ฐ ์์๋๋ ๋์ 1 ๊ธฐ๊ฐํค๋ฅด์ธ ํด๋ญ์ ํ๋ก์ธ์๋ 10,000,000 ๋ช ๋ น ์ฒ๋ฆฌ ์ฌ์ดํด์ ์ํํ ์ ์๋ค.
์ ์ถ๋ ฅ์ ๋ํ ๋จ์ ์ ๊ทผ์ ์ก์ธ์ค๋ฅผ ์์ํ๊ณ ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ๊ฒ์ด๋ค. ๊ทธ๋ฌ๋ ์ด๋ฌํ ์ ๊ทผ(๋๊ธฐ ์ ์ถ๋ ฅ)์ ํต์ ์ค์ ํ๋ก๊ทธ๋จ์ ์งํ์ ๊ฐ๋ก๋ง์, ์์คํ ์์์ ์ ํด ์ํ๋ก ๋ง๋ค์ด๋ฒ๋ฆฐ๋ค. ํ๋ก๊ทธ๋จ์ด ์๋ง์ ์ ์ถ๋ ฅ ๋์์ ์ทจํ ๋, ํ๋ก์ธ์๋ ์ ์ถ๋ ฅ ๋์์ด ๋๋ ๋๊น์ง ๊ธฐ๋ค๋ฆฌ๋ ์ ํด ์๊ฐ ๋๋ถ๋ถ์ ์๋ชจํ ์ ์๋ค.
ํํธ, ํต์ ์ ์์ํ ๋ค์ ์ ์ถ๋ ฅ์ด ๋๋ ๊ฒ์ ์๊ตฌํ์ง ์๋ ์ฒ๋ฆฌ๋ฅผ ์ํํ ์ ์๋ค. ์ด๋ฌํ ์ ๊ทผ์ ๋น๋๊ธฐ ์ ์ถ๋ ฅ์ผ๋ก ๋ถ๋ฅธ๋ค.
๋น๋๊ธฐ ์ ์ถ๋ ฅ์ ์ฌ์ฉํ๋ฉด ์ค๋ฃจํ, ๋ ์ดํด์, ๋ฐ์ ์๋๋ฅผ ๊ฐ์ ํ ์ ์๋ค.
Concurrency(๋์์ฑ) vs Parallelism(๋ณ๋ ฌ์ฑ)
Concurrency(๋์์ฑ) ์ ๋ง์ ๊ฒ๋ค์ ํ ๋ฒ์ ์ฒ๋ฆฌํ๋ ๊ฒ์ด๋ฉฐ,
Parallelism(๋ณ๋ ฌ์ฑ) ์ฒ๋ฆฌ๋ ํ ๋ฒ์ ๋ง์ ์์
์ ์ํํ๋ ๊ฒ์ด๋ค.
๋ณ๋ ฌ ์ฒ๋ฆฌ๋ ๋์์ ์ฌ๋ฌ ๊ณ์ฐ์ ์ํํ์ฌ ํ๋ก๊ทธ๋จ์ ๋ ๋น ๋ฅด๊ฒ ๋ง๋๋ ๊ธฐ์ ์ ๋ํ๋ธ๋ค.
์ฌ๋ฌ ์ฒ๋ฆฌ ์ฅ์น๊ฐ ์๋ ํ๋์จ์ด๊ฐ ํ์ํ๋ฉฐ, ๋ง์ ๊ฒฝ์ฐ ํ์ ๊ณ์ฐ์ ๊ตฌ์กฐ๋ ๋์ผํ์ง๋ง ๋ฐ๋์ ๊ทธ๋ด ํ์๋ ์๋ค.
GPU์์์ ๊ทธ๋ํฝ ๊ณ์ฐ์ ๋ณ๋ ฌ ์ฒ๋ฆฌ์ด๋ค.
๋ณ๋ ฌ ์ฒ๋ฆฌ์ ์ฃผ์ ๋ฌธ์ ์ ์ ์ต์ํ์ ํต์ ์ผ๋ก ๋
๋ฆฝ ๊ณ์ฐ ๋จ์์์ ๊ณ์ฐ์ ์ํํ ์ ์๋๋ก ๋ฐ์ดํฐ ์ข
์์ฑ์ ์ค์ด๋ ๊ฒ์ด๋ค.
์ด๋ฅผ ์ํด ์๋ก ๋ค๋ฅธ ๋จ์๋ก ๋์ผํ ๊ณ์ฐ์ ๋ ๋ฒ ์ํํ๋ ๊ฒ์ด ์ ๋ฆฌํ ์๋ ์๋ค.
๋์์ฑ์ ํ๋ก๊ทธ๋จ์ ๋ณด๋ค ์ ์ฉํ๊ฒ ๋ง๋๋ ๊ธฐ์ ์ ๋งํ๋ค.
๋์์ฑ์ ๊ตฌํ๋ ์ ์๊ณ ๋จ์ผ ์ฒ๋ฆฌ ์ฅ์น์์ ๋ง์ด ์ฌ์ฉ๋์ง๋ง, ์๋์ ๊ด๋ จํ์ฌ ์ฌ๋ฌ ์ฒ๋ฆฌ ์ฅ์น์ ์ด์ ์ ์ป์ ์ ์๋ค.
์ด์ ์ฒด์ ๋ฅผ ๋ฉํฐ ํ์คํน ์ด์ ์ฒด์ ๋ผ ๊ณ ํ๋ ๊ฒฝ์ฐ ๋์์ฑ์ ์ง์ํ๋ ๋์์ด์ด๋ค.
๋ธ๋ผ์ฐ์ ์ ํญ์์ ๋์์ ์ฌ๋ฌ ๋ฌธ์๋ฅผ ๋ก๋ํ ์ ์๊ณ ๋ฉ๋ด๋ฅผ ์ด๊ณ ๋ค๋ฅธ ์์
์ ์ํํ ์ ์๋ ๊ฒฝ์ฐ ์ด๋ ๋์์ฑ์ด๋ค.
ํฌ ๊ทธ๋ผ์ด๋์์ ๋ํ์ ์์ฉ ํ๋ก๊ทธ๋จ์ผ๋ก ์์
ํ๋ ๋์ ๋ฐฑ๊ทธ๋ผ์ด๋์์ ๋ถ์ฐ ๋คํธ์ํฌ ๊ณ์ฐ์ ์คํํ๋ฉด ๋์์ฑ์ด ๋๋ค.
๋ฐ๋ฉด, ๋ถ์ฐ ๋คํธ์ํฌ ํด๋ผ์ด์ธํธ๋ฅผ ํตํด ๊ณ์ฐํ ์์๋ ํจํท์ผ๋ก ์์
์ ๋๋๋ ๊ฒ์ ๋ณ๋ ฌ ์ฒ๋ฆฌ์ด๋ค.
์ฐธ๊ณ
Boost application performance using asynchronous I/O
Blocking-NonBlocking-Synchronous-Asynchronous
๋๊ธฐ๋ ์ ํํ ๋ฌด์์ ์๋ฏธํ๋ ๊ฑธ๊น?
'IT' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
Vite(๋น ๋ฅด๋ค): ๋ชจ๋ ์น ํ๋ก์ ํธ์ ๋ฏธ๋ (0) | 2022.11.23 |
---|---|
[๋ฐ์ดํฐ ๊ตฌ์กฐ] ๋ฐ์ดํฐ ๊ตฌ์กฐ (0) | 2022.11.03 |
[JAVA] ์ ์ ํฉํฐ๋ฆฌ ๋ฉ์๋(static factory method) ๋? (0) | 2022.11.03 |
[JAVA] How to install openJDK 8 on Mac (0) | 2022.11.03 |
[๋ฐ์ดํฐ ๊ตฌ์กฐ] ์ฐ๊ฒฐ ๋ฆฌ์คํธ(Linked lists) (0) | 2022.11.03 |
๋๊ธ