๐ค CPU Bound vs. I/O Bound
๊ฐ๋ฐํ ๋ ๊ฐ๋ฐํ๋ ๋ชจ๋์ด๋ ๋ก์ง์ด CPU Bound๊ฐ ๋ง์์ง I/O Bound๊ฐ ๋ง์์ง์ ๋ํด ์๊ฐํด๋ณด๊ณ ์ด๋ฅผ ๊ณ ๋ คํด ๊ฐ๋ฐ์ ํ๊ฒ ๋ฉ๋๋ค. ๊ทธ๋ ๋ค๋ฉด ์ด ์ธ๊ธํ CPU Bound์ I/OBound๋ ๋ฌด์์ผ๊น์? 1๏ธโฃ CPU Bound CPU Bound๋ ์ผ๋ฐ์ ์ผ๋ก CPU ์ฌ์ฉ ์ฐ์ฐ์ด I/O ์ฐ์ฐ๋ณด๋ค ๋ง์ ๊ฒฝ์ฐ๋ฅผ ๋งํฉ๋๋ค. ๋ณต์กํ ์ํ์ ์ฐ์ฐ์ด๋ ๋ ผ๋ฆฌ์ ๋ฌธ์ ํด๊ฒฐ์ ํ ๋ ๋ง์ด ์ฌ์ฉ๋ฉ๋๋ค. ์ด ๊ฒฝ์ฐ์๋ CPU์ ์ฑ๋ฅ์ ๋ฐ๋ผ ๋๋ CPU์ฑ๋ฅ์ ์ต๋ํ ํ์ฉ๋ ์ค๊ณ, ๊ฐ๋ฐ์ ๋ฐ๋ผ ์ฑ๋ฅ์ด ๊ฒฐ์ ๋ฉ๋๋ค. โ CPU Bound ์์ : - ์ด๋ฏธ์ง ๋๋ ๋น๋์ค ์ฒ๋ฆฌ: ํฝ์ ๋จ์ ์ฐ์ฐ์ด ํ์ํ๋ฏ๋ก CPU ์ฐ์ฐ์ด ๋ง์ต๋๋ค. - ๋จธ์ ๋ฌ๋ ํ์ต: ๋๋์ ๋ฐ์ดํฐ์ ๋ํ ๋ณต์กํ ๊ณ์ฐ์ด ํ์ํ๊ธฐ์ ๋จธ์ ๋ฌ๋์ ๋ชจ๋ธ ํ์ต์ CPU Bound๊ฐ ๋ง์ต๋๋ค. - ์ํธํ/๋ณตํธํ: ๋ณต์กํ ์ํ์ ์ฐ์ฐ์ด ํ์ํ๊ธฐ์ ๋๋ถ๋ถ CPU Bound์์ ์ ๋๋ค. โก๏ธ ์ฑ๋ฅ ํฅ์ ๋ฐฉ๋ฒ: - ์ฌ๋ฌ CPU์ฝ์ด๋ฅผ ํ์ฉํ ์ ์๋๋ก ๋ณ๋ ฌ์ฒ๋ฆฌ - ์บ์ฑ - ์๊ณ ๋ฆฌ์ฆ ์ฐ์ฐ, ๋ณต์ก๋๋ฅผ ๋ฎ์ถ์ ์๋๋ก ์ฝ๋ ์ต์ ํ - ๋น ๋ฅด๊ณ ์ฝ๋ ์๊ฐ ๋ง์ CPU๋ฅผ ์ถ๊ฐํ๊ฑฐ๋ ์ ๊ทธ๋ ์ด๋ - Multi processing โ๐ผโ๐ผโ๐ผ ํ๊ฐ์ง ๋ ๋ง์๋๋ฆฌ๋ฉด, ๋จธ์ ๋ฌ๋์์ GPU๋ฅผ ์ฌ์ฉํ๋ ์ด์ ๋ ์ด ๋๋ฌธ์ ๋๋ค. ๋ฅ๋ฌ๋์์๋ ์๋ฐฑ๋ง์์ ์์กฐ ๊ฐ๊น์ง์ ํ๋ผ๋ฏธํฐ๋ฅผ ๊ฐ์ง ์ ๊ฒฝ๋ง์ ํตํด ์ฐ์ฐ์ด ์ด๋ฃจ์ด์ง๋๋ค. ์ด ์ฐ์ฐ์ด ๋งค์ฐ ์ง์ฝ์ ์ด๊ณ ๋ณต์กํ์ฌ CPU๋ง์ผ๋ก ์ฒ๋ฆฌํ๋ฉด ์๋นํ ์๊ฐ์ด ์์๋ฉ๋๋ค. ์ด ํ๊ณ๋ฅผ ํด๊ฒฐํ๊ธฐ ์ํด์ ๋ณ๋ ฌ ์ฐ์ฐ์ด ํจ์จ์ ์ธ, ์์ฒ๊ฐ์ ์ฝ์ด๋ฅผ ๊ฐ์ง GPU๋ฅผ ์ฌ์ฉํ๊ฒ ๋ ๊ฒ์ ๋๋ค. 2๏ธโฃ I/O Bound ์์ ์ํ์ CPU๋ณด๋ค I/O์์ ์ด ๋ง์ ๊ฒฝ์ฐ๋ฅผ ์๋ฏธํฉ๋๋ค. ์ด ๊ฒฝ์ฐ๋ ์ ํ๋ฆฌ์ผ์ด์ ์ ์ฑ๋ฅ์ด I/O์๋์ ์์กดํ๊ฒ ๋ฉ๋๋ค. โ I/O Bound ์์ - ํ์ผ ์์ : ํ์ผ์ ์ด๊ณ , ์ฝ๊ณ , ์ฐ๋ ๊ฐ์ข ์์ ๋๋ค์๊ฐ I/O Bound์ ๋๋ค. - ๋ฐ์ดํฐ๋ฒ ์ด์ค ์ฟผ๋ฆฌ: ๋์ฉ๋ ๋ฐ์ดํฐ๋ฒ ์ด์ค์์ ๋ฐ์ดํฐ๋ฅผ ๊ฒ์ํ๋ ์์ ์ ๋์คํฌI/O๊ฐ ๋ง์ด ๋ฐ์ํฉ๋๋ค. - ๋คํธ์ํฌ ํต์ : ๋คํธ์ํฌ์ ๋ฐ์ดํฐ ์ก์์ ์ ๋คํธ์ํฌ I/O๋ฅผ ๋ง์ด ์ฌ์ฉํ๊ธฐ ๋์ด ์ด์ญ์ I/O Bound์์ ์ด๋ผ ํ ์ ์์ต๋๋ค. โก๏ธ ์ฑ๋ฅ ํฅ์ ๋ฐฉ๋ฒ: - Non-blocking, Async I/O ์ฌ์ฉ - I/O ๋น๋๊ฐ ๋ฎ์ถ์์๋๋ก ์ฝ๋ ์ต์ ํ - Multi Threading ์ค์ ์์คํ ์ด๋ ๋ชจ๋์์๋ CPU Bound, I/O Bound ๋ชจ๋ ์ผ์ด๋ฉ๋๋ค. ๋ค๋ง ์์ ๋ง์๋๋ฆฐ๊ฒ๊ณผ ๊ฐ์ด ํน์ ์์ ์ด ๋ง์ด ์ผ์ด๋๋ค๋ฉด ๊ทธ ์์ ์ด ํจ์จ์ ์ผ๋ก ์งํ ๋ ์ ์๋๋ก ๋ฆฌ์์ค๋ฅผ ํ ๋นํ๊ณ ์์คํ ์ ์ต์ ํํ์ฌ ์ค๊ณ,๊ฐ๋ฐ ๋์ด์ผ ํฉ๋๋ค. ์์คํ ์ ์๊ตฌ์ฌํญ๊ณผ ํ๊ฒฝ์ ์ ํ์ ํ๊ณ ์ ์ ํ ๊ท ํ์ ์ฐพ์์ผ ํ ๊ฒ์ ๋๋ค. ๐ References: https://leimao.github.io/blog/Python-Concurrency-High-Level/ https://velog.io/@carrykim/๋ถ์ฐ-์์คํ -2-4.-Multi-Processing-vs-Multi-Threading-vs-Async