๋ชฉ๋ก2022/11 (3)
KoreanFoodie's Study
์์ ฏ ๋ฆฌํ๋ ํฐ ์ธ๋ฆฌ์ผ์ ์์ ฏ ๋ฆฌํ๋ ํฐ ๊ธฐ๋ฅ์ ์ด์ฉํ๋ฉด, ํ์ฌ ํ๋ ์ดํ๊ณ ์๋ ์ฐฝ์์ ์ด๋ค ์์ ฏ์ด ์ด๋ค ๋ธ๋ฃจํ๋ฆฐํธ๋ฅผ ์ฌ์ฉํ๊ณ ์๋์ง, visibility ์ํ๋ ์ด๋ ํ์ง ๋ฑ์ ํ๋์ ํ์ ํ ์ ์๋ค(์์ ฏ ๋ฆฌํ๋ ํฐ : ์ฐฝ > ๊ฐ๋ฐ์ ํด > ์์ ฏ ๋ฆฌํ๋ ํฐ). ๋ ์์ธํ ์ฌํญ์ ์ด๋์ฐ๋ ๋ธ๋ก๊ทธ์ ์๋ํฐ ํ์ฅ ๊ธฐ์ด ๊ธ์ ์ฐธ๊ณ ํ์. ์์ ํํธ ํ ์คํธ ๊ฐ๋ฅ ์์ ฏ์ ๋๋ฅด๋ฉด, ๋ค์๊ณผ ๊ฐ์ด ํ๋ ์ด ํ๋ฉด๊ณผ ์์ ฏ ๋ฆฌํ๋ ํฐ ์ฐฝ์ด ๋ฐ๋๋ ๊ฒ์ ํ์ธํ ์ ์๋ค(์ด๋ฏธ์ง๋ ๊ณต์ ๋ฌธ์์์ ๊ฐ์ ธ์ด) ํด๋น ์์ ฏ์ ๊ณ์ธต ๊ตฌ์กฐ๋ฅผ ํ์ ํ ์ ์์ผ๋ฉฐ, ์ค์๊ฐ์ผ๋ก ์์ ฏ์ ๋๊ณ ํฌ ์๋ ์์ด ์์ ฏ ๊ด๋ จ ๋๋ฒ๊น ์ ๋งค์ฐ ์ ์ฉํ ๊ธฐ๋ฅ์ด๋ค!
Asio ๋ Asynchronous IO ์ ์ฝ์์ด๋ค. Asio ๋ฅผ ์ดํดํ๊ธฐ ์ํด์๋, ๋ค์๊ณผ ๊ฐ์ ์ฉ์ด๋ค์ ์๊ณ ์์ด์ผ ํ๋ค. IO Service ํด๋์ค : ์ปค๋์์ ๋ฐ์ํ ์ ์ถ๋ ฅ ์ด๋ฒคํธ๋ฅผ ๋์คํจ์น ํด์ฃผ๋ ๊ธฐ๋ฅ์ ์ํ. ๋์คํจ์น๋, ์ฐ์ ์์๊ฐ ๋์ ์์ ์ด ์ฐ์ ์ ์ผ๋ก ์ํ๋ ์ ์๋๋ก ์์คํ ์์์ ํ ๋นํ๋ ๊ฒ์ ์๋ฏธํ๋ค. IO Service ํด๋์ค๋ ์ปค๋์์ ๋ฐ์ํ ๋คํธ์ํฌ์์ ์ ์ ๋ฐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ์ด๋ฒคํธ๋ฅผ ์ฒ๋ฆฌํ๋ค. ์ข ๋จ์ (Endpoint) : ๋คํธ์ํฌ ์์ ํน์ ์ปดํจํฐ์์ ์คํ๋๊ณ ์๋ ํ๋์ ํ๋ก๊ทธ๋จ. ๊ตฌ์ฒด์ ์ผ๋ก IP ์ฃผ์์ ํฌํธ ๋ฒํธ์ ํ ์์ ์ข ๋จ์ ์ด๋ผ๊ณ ํจ. DNS(Domain Name Server) : Boost Asio ์์๋ ๋๋ฉ์ธ ์ฃผ์๋ฅผ ์ด์ฉ, IP ์ฃผ์๋ฅผ ์์๋ด์ด ์ข ๋จ์ ์ ๊ตฌํ๋ค. ..
IOCP๋ CPU ๊ฐ์๋งํผ๋ง ์ฐ๋ ๋๋ฅผ ์ฐ๋ ์๋ฒ์ด๋ค. IOCP ๋ฅผ ์ฌ์ฉํ ๋ชจ๋ Send/Recv ๋ Overlapped I/O ๋ก ๋์ํ๋ค. ๋ฉํฐ์ฐ๋ ๋์์ ๋์ํ๋ฉฐ, ์ฝ๋ฐฑํจ์๋ค์ ๋์์ ๋์ํด์ ์ฑ๋ฅ์ ๋์ธ๋ค. IOCP๊ฐ ์ฌ์ฉํ๋ IOCP ๊ฐ์ฒด๋ ์ปค๋ ์์์ ๊ด๋ฆฌ๋๋ค. ์ปค๋ ๋ด์๋ DEVICE LIST ๋ผ๋ ์๋ฃ๊ตฌ์กฐ๊ฐ ์กด์ฌํ๋๋ฐ, ์์ผ์ IOCP ์ ๋ฑ๋กํ๋ฉด IOCP ๊ฐ์ฒด๋ DEVICE_LIST ์ ์์ผ๋ค์ ๋ฑ๋กํด์ ์ฒ๋ฆฌํ๋ค. ํ๋ก๊ทธ๋๋จธ๋ DEVICE_LIST ๋ฅผ ์ง์ ๋ณด๊ฑฐ๋ ์ ์ดํ ์ ์๋ค. ํ๋ฆ์ ๋ค์๊ณผ ๊ฐ์ด ์์ฝํด ๋ณผ ์ ์์ ๊ฒ ๊ฐ๋ค : I/O ๋๋ฐ์ด์ค(์์ผ, FD) IOCP ์ ๋ฑ๋ก : CreateIoCompletionPrt ํจ์๋ฅผ ํตํด ๋๋ฐ์ด์ค์ CompletionPort(์ดํ CP) ๋ฅผ ๋ฐ์ธ..