[Game Server] ๐ฎ Game Server
๐ IOCP Server
Input/Output Completion Port
์ ์ฝ์์ด๋ค.
windowํ๊ฒฝ์์ ์ ์ผ ํํ ์ฐ์ด๋ ๋
ผ๋ธ๋กํน ํ๋ก์ธ์ค์ผ๋ก์จ, ์ต์ํ์ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ์ฌ Port์ ๊ด๋ จ๋ ์
์ถ๋ ฅ์ ์ฒ๋ฆฌํ๋ ๊ธฐ๋ฒ์ด๋ค.
IOCP์ ๋ชฉ์ ์ ๋์์ ์ํ๋๋ ์ค๋ ๋์ ์ํ์ ์ค์ ํด์ CPU์ ์์์ ์ต๋ํ ํจ์จ์ ์ผ๋ก ์ฌ์ฉํ๊ฒ ํ๋ ๊ฒ์ด๋ค.
Overlapped I/O๊ฐ ์๋ฃ๋๋ฉด ์ด๋ฅผ ๊ฐ์งํ์ฌ ์ฌ์ฉ์์๊ฒ ์๋ ค์ฃผ๋ ์ญํ ์ ํ๋ค.
epoll์ I/O๊ฐ ๊ฐ๋ฅํ๋ฉด ์ด๋ฅผ ๊ฐ์งํ์ฌ ์ฌ์ฉ์์๊ฒ ์๋ ค์ฃผ๋ ์ญํ ์ ํ๋ค.
๐ ๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ชจ๋ธ
๋ฐ์ดํฐ ์ฒ๋ฆฌ ๋ชจ๋ธ์ ๋ฐ์ดํฐ๋ฅผ ๋ฐ๋ ๋ฐฉ์์ ์๋ฏธํ๋๋ฐ, ํฌ๊ฒ ๋๊ธฐ์ ์ฒ๋ฆฌ์ ๋น๋๊ธฐ์ ์ฒ๋ฆฌ๊ฐ ์กด์ฌํ๋ค.
๋๊ธฐ & ๋น๋๊ธฐ๋ ๋ฆฌํด๊ฐ์ ํ์ธ ์ ๋ฌด๋ก ๊ตฌ๋ถํ๋ค.
๐ ๋๊ธฐ(Synchronous)
๋๊ธฐ(Synchronous) ๋ฐฉ์์ ๋ฐ์ดํฐ์ ์์ฒญ๊ณผ ๊ฒฐ๊ณผ๊ฐ ํ์๋ฆฌ์์ ๋์์ ์ผ์ด๋๋ ๊ฒ์ผ๋ก, ๋ฐ์ดํฐ ์์ฒญ ํ ์๊ฐ์ด ์ผ๋ง๋ ๊ฑธ๋ฆฌ๋ ์ง ์์ฒญํ ์๋ฒ๋ ํ๋ก์ธ์ค๋ ์ ์งํ ์ฑ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฐ๋ค.
๋ณดํต ๋๋ถ๋ถ์ ํจ์๋ ํ๋ก์ธ์ค๊ฐ ์ ๋ฐฉ์์ผ๋ก ์๋ํ๋ฉฐ ์ค๊ณ๊ฐ ๋งค์ฐ ์ง๊ด์ ์ด๊ณ , ๊ฐ๋จํ๋ค.
ํ์ง๋ง, ๊ฒฐ๊ณผ๊ฐ ์ฃผ์ด์ง ๋๊น์ง ๋ฌดํ์ ์ผ๋ก ๋๊ธฐํ๋ ๋ฐฉ์์ด๋ฏ๋ก ์์ฒญ๋ฐ์ ์๋ฒ๋ ํ๋ก์ธ์ค๊ฐ ์ค๋ฅ๊ฐ ์๊ธฐ๊ฑฐ๋ ํต์ ์ ๋ฌธ์ ๊ฐ ๋ฐ์ํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ์ง ๋ชปํ๋ฉด ํฐ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์๋ค.
๐ ๋น๋๊ธฐ(Asynchronous)
๋น๋๊ธฐ(Asynchronous) ๋ฐฉ์์ ๋ฐ์ดํฐ์ ์์ฒญ๊ณผ ๊ฒฐ๊ณผ๊ฐ ๋์์ ์ผ์ด๋์ง ์๋ ๊ฒ์ผ๋ก, ๋ฐ์ดํฐ ์์ฒญ ํ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ๋ฉด ์ ์งํ ์ฑ ๋๊ธฐํ๋ ๊ฒ์ด ์๋๋ผ ์ฝ๋ฐฑ ํจ์๋ฅผ ํตํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๋ฐ๋๋ค.
์์ฒญ์ ๋ฐ๋ผ์ ๊ฒฐ๊ณผ๋ฅผ ๊ธฐ๋ค๋ฆฌ์ง ์์๋ ๋์ง๋ง, ๋๊ธฐ ๋ฐฉ์์ ๋นํด์ ์ค๊ณ๊ฐ ๋ณต์กํ๋ค๋ ๋จ์ ์ ๊ฐ์ง๊ณ ์๋ค.
๐ ๋ธ๋กํน vs ๋ ผ๋ธ๋กํน
๋ธ๋กํน์ ๋ฉํฐ์ค๋ ๋๋ I/O์์ ํจ์ A์์ B๋ฅผ ํธ์ถํ ๋, ์ ์ด๊ถ์ ๋๊ธฐ๋ ์๋๊ธฐ๋๊ฐ ์ค์ํ๋ค.
๋ธ๋กํน & ๋
ผ๋ธ๋กํน์ ์ ์ด๊ถ์ ์ฃผ์ฒด๋ฅผ ๋๊ธฐ๋๋ ์ ๋๊ธฐ๋๋๋ก ๊ตฌ๋ถ
๐ ๋ธ๋กํน
๋ธ๋กํน์ ํจ์ A์์ Bํจ์๋ฅผ ํธ์ถํ ๋, ์ ์ด๊ถ์ ํจ์ A๊ฐ ํธ์ถํ ํจ์ B์ ๋๊ฒจ์ค๋ค.
๋ฐ๋ผ์, ํจ์ A๋ ์ ์ด๊ถ์ ๋๋ ค๋ฐ๊ธฐ ์ ๊น์ง ๋ฉ์ถฐ์๊ฒ ๋๋ค.
๐ ๋ ผ๋ธ๋กํน
๋ธ๋กํน์ ํจ์ A์์ Bํจ์๋ฅผ ํธ์ถํ ๋, ์ ์ด๊ถ์ ํจ์ A๊ฐ ํธ์ถํ ํจ์ B์ ๋๊ฒจ์ฃผ์ง๋ ์๋๋ค. ๋ฐ๋ผ์, ํจ์ A๋ ์ ์ด๊ถ์ ๋๋ ค๋ฐ๊ธฐ ์ ๊น์ง ๋ฉ์ถฐ์์ง ์๊ณ ์ฝ๋๋ฅผ ๊ณ์ ์คํํ๋ค.
- ์ถ์ฒ - ๋๊ธฐ์ ๋น๋๊ธฐ
๐ Main Thread/ Worker Thread
- ์์ ์ ์ค๋ ๋ (Worker Thread)
- ๋ฉ์ธ ์ค๋ ๋ (Main Thread)
ํ๋ก์ธ์ค๋ ์ผ๋ฐ์ ์ผ๋ก ํ๋ก์ธ์ค ํ๋ ์์ ์ฌ๋ฌ ๋ฉํฐ ์ค๋ ๋๊ฐ ๋๊ณ ์๋ค.
์ด๋, ๋ฉํฐ ์ค๋ ๋๋ฅผ ์ฌ์ฉํ๋ฉด ์ฑ๋ฅ์ด ํฅ์๋์ง๋ง, UI๋ฅผ ๋ฉํฐ ์ค๋ ๋๋ก ๋ณ๊ฒฝ๋๋ฉด ํ๋ฉด์ด ์ถ๋ ฅ๋์ด์ผ ํ๋ ์๊ฐ์ ์ ์ง์ํ๋ก ๋์๊ฐ๊ฒ ๋๋ค.
๋ฐ๋ผ์, UI๋ฅผ ๋ค๋ฅด๋ ์ค๋ ๋๋ ์ค์ง Main(UI) ์ค๋ ๋์์๋ง ๊ฐ๋ฅํด์ผ๋ง ํ๋ค.
์์
์ ์ค๋ ๋๋ ๋ฉ์ธ์ค๋ ๋๋ฅผ ์ ์ธํ ๋๋จธ์ง ๋ชจ๋ ์ค๋ ๋๋ฅผ ์์
์ ์ค๋ ๋๋ผ ํ๋ค.
๐ Overlapped
์์ผ์ ๊ธฐ๋ณธ์ ์ผ๋ก blocking ๋ฐฉ์์ผ๋ก ์ด๋ฃจ์ด์ ธ ์๋ค.
-> ์ค๋ ๋์์ ๋คํธ์ํฌ ์์ ์ ํ๋ ํจ์ ํธ์ถ์ ํ๋ฉด ์์ ํ ์ ์๋ ๋ฐ์ดํฐ๊ฐ ์๊ธธ ๋๊น์ง ๋ธ๋กํน์ด ๋ฐ์ํ๋ค.
Overlapped I/O๋ I/O์ ๋ํ ์ฒ๋ฆฌ๋ฅผ Device Driver์ ๊ถํ์ ๋๊น์ผ๋ก์ ๋ณ๋์ ์ค๋ ๋ ์์ด ๋น๋๊ธฐ๋ก ๋ ์ด์์ ๋ฐ์ดํฐ ์ ์ก์ ์ค์ฒฉ์ํค๋ ๊ฒ์ ์๋ฏธํ๋ค.
https://sanghun219.tistory.com/104
๐
๊ฐ์ธ ๊ณต๋ถ ๊ธฐ๋ก์ฉ ๋ธ๋ก๊ทธ์
๋๋ค.
ํ๋ฆฌ๊ฑฐ๋ ์ค๋ฅ๊ฐ ์์ ๊ฒฝ์ฐ ์ ๋ณดํด์ฃผ์๋ฉด ๊ฐ์ฌํ๊ฒ ์ต๋๋ค.๐