๋ฉด์ ๊ด : IOCP ์ ๋ํด์ ์ค๋ช ํด ์ฃผ์๊ฒ ์ด์?
๋: ๋จผ์ , IOCP์ ๋ชฉ์ ์ ๋์์ ์ํ๋๋ ์ค๋ ๋์ ์ํ์ ์ค์ ํด์ CPU์ ์์์ ์ต๋ํ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ฒ ํ๋ ๊ฒ์ ๋๋ค.
๋: IOCP๋ Overlapped I/O๊ฐ ์๋ฃ๋๋ฉด, ์ด๋ฅผ ๊ฐ์งํด์ ์ฌ์ฉ์์๊ฒ ์๋ ค์ฃผ๋ ์ญํ ์ ํฉ๋๋ค.
๋ฉด์ ๊ด : Overlapped I/O๊ฐ ๋ญ๊ฐ์?
๋ : Overlapped I/O๋ I/O์ ๋ํ ์ฒ๋ฆฌ๋ฅผ Device Driver์ ๊ถํ์ ๋๊น์ผ๋ก์ ๋ณ๋์ ์ค๋ ๋ ์์ด ๋น๋๊ธฐ๋ก ๋ ์ด์์ ๋ฐ์ดํฐ ์ ์ก์ ์ค์ฒฉ์ํค๋ ๊ฒ์ ์๋ฏธํฉ๋๋ค. Device Driver๋ ์์ ์ ๋๋ด๋ฉด ์ ์ ๋ฒํผ์ ๋ฐ์ดํฐ๋ฅผ ์ฑ์๋ฃ์ผ๋ฏ๋ก I/O์ ๋ํ ์ฒ๋ฆฌ๋ฅผ ์ค์ฒฉํด์ ์ฒ๋ฆฌํ ์ ์์ต๋๋ค.
๋ฉด์ ๊ด : Overlapped I/O์ Nonblock Socket์ ์ฐจ์ด์ ์ด ๋ญ๋ผ๊ณ ์๊ฐํ์ญ๋๊น?
๋ : Overlapped I/O๋ I/O ์ฒ๋ฆฌ๋ฅผ ๋น๋๊ธฐ๋ก ์ฒ๋ฆฌํ๋ฏ๋ก ๋ฐ์ดํฐ ๋ณต์ฌ ๊ณผ์ ์์ Block๋์ง ์์ต๋๋ค. ๊ทธ๋ฆฌ๊ณ I/O ์ฒ๋ฆฌ๋ฅผ ์์๋๋ก ํ์ง ์๊ณ ๋์คํฌ์ ๊ฐ๊น์ด ์์๋๋ก ์ฒ๋ฆฌํ๋ฉฐ Zero-Copy๋ฅผ ํตํด์ ์์ผ ๋ฒํผ๋ก์ ๋ณต์ฌ๋ฅผ ๊ฑด๋๋ฐ๊ณ ์ ์ ๋ฒํผ์ ๋ฐ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํ ์ ์์ต๋๋ค.
๋ฉด์ ๊ด : Zero-Copy๊ฐ ๋ญ๊ฐ์?
๋: Zero-Copy์ ๋ชฉ์ ์ ๋์คํฌ์ ์๋ ๋ฐ์ดํฐ๋ฅผ ๋คํธ์ํฌ๋ก ์ ์กํ ๋ ์ผ์ด๋๋ ๋ฐ์ดํธ ์นดํผ๋ฅผ ์ต์ํ ํ๊ธฐ ์ํ ๊ฒ์ ๋๋ค. ์ผ๋ฐ์ ์ผ๋ก ๋คํธ์ํฌ๋ฅผ ์ด์ฉํด์ ๋ฐ์ดํฐ๋ฅผ ์ ์กํ๋ ค๋ฉด ์ปค๋ ์์ญ์์ ์ฌ์ฉ์ ์์ญ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ์ฝ์ด๋ค์ธ ํ ๋ค์ ์ฌ์ฉ์ ์์ญ์์ ์ปค๋ ์์ญ์ผ๋ก ๋ฐ์ดํฐ๋ฅผ ๋ณต์ฌํด์ผ ํฉ๋๋ค. ์ด๋ฌํ ๊ณผ์ ์ ์ฌ์ฉ์ ์์ญ์์ ๋ฐ์ดํฐ๋ฅผ ์กฐ์ํ์ง ์๊ณ ๋ฐ๋ก ๋ณด๋ด๋ ๋ ์์ ๋ถํ์ํ ๊ณผ์ ์ด ๋ฉ๋๋ค. ๊ทธ๋ฌ๋ฏ๋ก ์ปค๋๊ณผ ์ฌ์ฉ์ ์์ญ์ ๋๋๋๋ ๊ณผ์ ์ ๊ฑฐ์น์ง ์๊ณ Read Buffer ์์ Socket Buffer๋ก์ ๋ณต์ฌ๋ง์ ๊ฑฐ์ณ์ ์ปค๋๊ณผ ์ฌ์ฉ์ ์์ญ๊ฐ์ 2๋ฒ์ ๋ณต์ฌ ๊ณผ์ ์ ์๋ตํ ์ ์์ต๋๋ค.
๋ฉด์ ๊ด : ๊ณ์ ์ค๋ช ํด ๋ณด์ธ์.
๋ : Overlapped ์ ์ ์ถ๋ ฅ์ด ์๋ฃ๋๋ฉด Completion Port๋ผ๊ณ ํ๋ Queue์ Completion Packet์ด ๊ธฐ๋ก๋๊ณ ์ค๋ ๋๊ฐ Queue๋ฅผ ํ์ธํ์ฌ Completion Packet์ด ์์ผ๋ฉด ์๋ฃ๋ ๋ด์ฉ์ ๋ฐ์๊ฐ ์ ์์ต๋๋ค.
๋ : Select ๋ฐฉ์๊ณผ ๋น๊ตํด ๋ดค์ ๋ ์์ผ ํ๋์ ์ค๋ ๋ ํ๋๋ฅผ ํ ๋นํด ์ฃผ๋ ๊ฒ๊ณผ ๋น๊ตํ์ฌ, ์์์ ์ค๋ ๋๋ก I/O์ฒ๋ฆฌ๋ฅผ ํ ์ ์๋ค๋ ์ ์์ CPU์์์ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๋ค๊ณ ํ ์ ์์ต๋๋ค.
์ฐธ๊ณ
https://sanghun219.tistory.com/104
'๐ฃ๏ธ ์ ์ ์ธํฐ๋ทฐ > ๋คํธ์ํฌ' ์นดํ ๊ณ ๋ฆฌ์ ๋ค๋ฅธ ๊ธ
์ ์ ๊ฐ๋ฐ์ ๊ธฐ์ ๋ฉด์ : ๋คํธ์ํฌ 01 (2) | 2023.12.18 |
---|