๋ชฉ๋ก์ ์ฒด ๊ธ (1096)
KoreanFoodie's Study
[C++ ๊ฒ์ ์๋ฒ] 3-11. Overlapped ๋ชจ๋ธ (์ฝ๋ฐฑ ๊ธฐ๋ฐ) ํต์ฌ : 1. ์ฝ๋ฐฑ์ ํ์ฉํ์ฌ Overlapped ๋ชจ๋ธ์ ๋ง๋ค๋ฉด, ์ด๋ฒคํธ์ ๊ฐฏ์ ์ ํ ์์ด(64๊ฐ) ์ค๋ ๋๊ฐ ํน์ ๋คํธ์ํฌ ์ด๋ฒคํธ๋ฅผ ๋ฐ์์ ๋ ์ํ๋ ํจ์๋ฅผ ํธ์ถํ๊ฒ ๋ง๋ค ์ ์๋ค. 2. ๋น๋๊ธฐ ์ ์ถ๋ ฅ์ ์์ํ๊ณ ๋์ ์ค๋ ๋๋ Alertable Wait ์ํ๋ก ๋ค์ด๊ฐ๊ฒ ๋๊ณ , OS ์์ ๋น๋๊ธฐ ์ ์ถ๋ ฅ์ด ์๋ฃ๋ ํ, APC ํ๋ฅผ ๋น์์ฃผ๋ฉฐ(ํ๊บผ๋ฒ์ ๋น์์ค๋ค) ์ฝ๋ฐฑ ํจ์๋ฅผ ํธ์ถํ๊ฒ ๋๋ฉด, ์ค๋ ๋๋ Alertable Wait ์ํ๋ฅผ ๋น ์ ธ๋๊ฐ๋ค. 3. ์ฝ๋ฐฑ ๊ธฐ๋ฐ์ ์ด๋ฒคํธ์ ๋ํ ๊ฐฏ์ ์ ํ(64๊ฐ)๊ฐ ์์ผ๋, ๋ชจ๋ ๋น๋๊ธฐ ์์ผ ํจ์์์ ์ฌ์ฉ ๊ฐ๋ฅํ์ง๋ ์์ผ๋ฉฐ(accept), Alertable Wait ์ํ๋ก ๋น๋ฒํ๊ฒ ์ ํ๋์ด ์ฑ๋ฅ์ด ์ ํ๋ ์ ..
[C++ ๊ฒ์ ์๋ฒ] 3-10. Overlapped ๋ชจ๋ธ (์ด๋ฒคํธ ๊ธฐ๋ฐ) ํต์ฌ : 1. ๋ธ๋กํน ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ํจ์ ํธ์ถ ํ, ์์ ์๋ฃ์๊น์ง ๋๊ธฐ๋ฅผ ํ๋ฉฐ ๋ ผ๋ธ๋กํน ๋ฐฉ์์ ์ฌ์ฉํ๋ฉด ๋ค๋ฅธ ์์ ์ ํ๋ค. 2. ๋ ผ๋ธ๋กํน/๋น๋๊ธฐ ๋ฐฉ์์ ๋ชจ๋ธ์ด AIO(Overlapped IO) ๋ชจ๋ธ๋ก, ์ด์์ฒด์ ๋ ์ด๋ฒคํธ ๊ฐ์ฒด๋ฅผ Signaled ์ํ๋ก ๋ง๋ค์ด ์๋ฃ ์ํ๋ฅผ ์๋ ค์ค๋ค. 3. WSAWaitForMultipleEvents ํจ์๋ฅผ ํธ์ถํด์ ์ด๋ฒคํธ ๊ฐ์ฒด์ Signal ์ ํ๋ณ ํ, WSAGetOverlappedResult ๋ฅผ ํธ์ถํด ๋น๋๊ธฐ ์ ์ถ๋ ฅ ๊ฒฐ๊ณผ๋ฅผ ํ์ธํ๋ค. ์ด์ ๊ธ์์ ์ ๋ฆฌํ๋ Select ๋ชจ๋ธ ๋ง๊ณ , ์ค์ ๋ก ์ฌ์ฉํ IOCP ๋ชจ๋ธ์ ์ํ ๊ธฐ์ด ์์ ์ ํด ๋ณด์. ์ด๋ฒ ๊ธ์์๋ Overlapped ๋ชจ๋ธ์ ๋ํด ๋ค๋ฃฐ ๊ฒ์ธ๋ฐ..
[C++ ๊ฒ์ ์๋ฒ] 3-9. WSAEventSelect ๋ชจ๋ธ ํต์ฌ : 1. WSAEventSelect ๋ชจ๋ธ์ ์ฌ์ฉํ๋ฉด, ํน์ ์์ผ๊ณผ ํน์ ๋คํธ์ํฌ ์ด๋ฒคํธ๋ฅผ ์ฐ๊ฒฐํด, ์ค์ ์ด๋ฒคํธ๊ฐ ๋ฐ๋ํ์ ๋ ๋ฐ์ธ๋ฉ๋ ์์ผ์ผ๋ก๋ถํฐ ์ํ๋ ์ ๋ณด๋ฅผ ์ป์ ์ ์๋ค. 2. Select ๋ชจ๋ธ๊ณผ ๋ฌ๋ฆฌ, ๋งค๋ฒ Set ์ ๋ง๋ค์ง ์๊ณ ์ฌ์ฉํ ์์ผ์ ํด๋นํ ์ด๋ฒคํธ๋ง Reset ํด ์ฃผ๋ฉด ๋๋ค. 3. ์ด๋ฒคํธ ๋ฐ๋ ์, ์ ์ ํ ํจ์๋ฅผ ํธ์ถํด ์ฃผ์ด์ผ ํด๋น ์ด๋ฒคํธ๋ฅผ ๋ค์ ์ฌ์ฉํ ์ ์๋ค. ์ฐ๋ฆฌ๋ ์ด์ ๊ธ์์ Select ๋ชจ๋ธ์ ๋ํด ๋ฐฐ์ ๋ค. ๊ฐ๋จํ ์๊ธฐํด์, Select ๋ชจ๋ธ์ ํ์ฉํ๋ฉด ํน์ ์ญํ ์ ํ๋ SET(READ_SET/WRITE_SET)์ ํน์ ์์ผ์ ๋ฃ์ด '๊ด์ฐฐ' ํ ์ ์๊ฒ ๋ง๋ฆ์ผ๋ก์จ ์ฐ๋ฆฌ๊ฐ ์ํ๋ ํน์ ๋์์ ํน์ ์์ผ์ด ์ํํ๋..
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋ํด ์์๋ณด๋ฉฐ ์ด๋ฅผ C++ ๋ฅผ ์ด์ฉํ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ด๋ป๊ฒ ์ ์ฉํ๋ฉด ์ข์์ง ์์๋ณด๊ฒ ์ต๋๋ค. ํต์ฌ : 1. ํน์ฑ ๊ธฐ๋ฐ ํ ์คํธ๋ฅผ ์ ๋ ํ ์คํธ์ ํจ๊ป ํ์ฉํ๋ฉด ํ ์คํธ๋ฅผ ๊ฐ๋ตํํ๋ฉด์ ๊ฒฌ๊ณ ํ ํ ์คํธ๊ฐ ๊ฐ๋ฅํ๋ค. 2. ๋ชจ๋๋๋ ํน์ ์ธ์๋ฅผ ํ์ ์ผ๋ก ๋ฐ์, unit/bind operator ๋ฅผ ํตํด ํน์ ์ค๋ณต์ ์ ๊ฑฐํ๋ ๊ฒ์ ์ ์ฉํ๊ฒ ์ฌ์ฉ๋ ์ ์๋ค. 3. ์ด๋ฒคํธ ์์ฑ์ ํ์ฉํ๋ฉด, ๋ฐ์ดํฐ๊ฐ ์ด๋ค ์ฐ์ ๋ก ํ์ฌ ์ํ์ ์ด๋ฅด๊ฒ ๋์๋์ง ์ฝ๊ฒ ํ์ ์ด ๊ฐ๋ฅํ๋ค. ํน์ฑ ๊ธฐ๋ฐ ํ ์คํธ ์ํํธ์จ์ด ๊ฐ๋ฐ์์ ์ ๋ ํ ์คํธ๋ ๋งค์ฐ ์ค์ํ๋ค. ๊ฒฐ๊ตญ ํ๋ก๊ทธ๋จ์ด๋ผ๋ ๊ฒ์ด ํน์ ์ ๋ ฅ์ ๋ฃ์ผ๋ฉด ํน์ ์ถ๋ ฅ์ด ๋์ค๋๋ก ํ๋ ๊ฒ์ด๋ฏ๋ก, ์ํ๋ ๊ฒฐ๊ณผ๊ฐ ๋์ค๋์ง ๋ฐฐํฌ ์ ์ ํญ์ ์ ๊ฒํด์ผ ํ๋ค. ๊ธฐ์กด์๋ ์ฌ์ค ํน์ ์ํฉ์ ๋..
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋ํด ์์๋ณด๋ฉฐ ์ด๋ฅผ C++ ๋ฅผ ์ด์ฉํ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ด๋ป๊ฒ ์ ์ฉํ๋ฉด ์ข์์ง ์์๋ณด๊ฒ ์ต๋๋ค. ํต์ฌ : 1. ๋ฉ๋ชจ์ด์ ์ด์ ์ ํ์ฉํ๋ฉด, ์ฌ๊ท์ ์ธ ์ฐ์ฐ์์ ์ด์ ์ฐ์ฐ์ ์บ์ฑ๊ฐ์ ์ด์ฉํด ๋ถํ์ํ ์ฐ์ฐ์ ์ค์ผ ์ ์๋ค. 2. ๊ผฌ๋ฆฌ ์ฌ๊ท ์ต์ ํ๋ ์ปดํ์ผ๋ฌ ์ต์ ํ ํ๋๊ทธ๋ฅผ ํ์ฑํํ๋ฉด ๋๋ค. ์ด๋ฅผ ํตํด ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ์ ๋ฎ์ถ ์ ์๋ค. 3. ์์ ํจ์์ ๋ถ๋ณ์ฑ์ ์ด์ฉํด ๋ณ๋ ฌ ์ฐ์ฐ์ ์ฝ๊ฒ ์ ์ฉํ ์ ์๋ค. ํ์ง๋ง future ๋ฑ์ ์ฌ์ฉํ์ฌ ๋ณ๋ ฌ ์ฐ์ฐ์ ํ๋ ๊ฒ๋ณด๋ค, sequential ํ ๋ฐฉ์์ ์ฑ๋ฅ์ด ๋ ๋์ ๋๋ ์๋ค. ํผํฌ๋จผ์ค ์ต์ ํ ์ฌ์ค ๋ชจ๋ ๊ฒฝ์ฐ์ ์ํฉ์ ์๋ง์ ์ต์ ํ ๋ฐฉ๋ฒ์ด๋ ์๋ค. ์ด๋ค ๊ฒฝ์ฐ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ํฌ์ํด์๋ผ๋ ์๋๋ฅผ ๋์ฌ์ผ ํ ์๋ ์๊ณ , ๋ค๋ฅธ ๊ฒฝ์ฐ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์๋ผ๊ธฐ ์ํด ๋น ..
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋ํด ์์๋ณด๋ฉฐ ์ด๋ฅผ C++ ๋ฅผ ์ด์ฉํ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ด๋ป๊ฒ ์ ์ฉํ๋ฉด ์ข์์ง ์์๋ณด๊ฒ ์ต๋๋ค. ํต์ฌ : 1. ํจ์ํ ์ฐ์ฐ์๋ฅผ ํ์ฉํด ์ค๋ณต์ ์ ๊ฑฐํ๊ณ DRY ์์น์ ์งํฌ ์ ์๋ค. 2. ํ๋ผ๋ฏธํฐ ์ ์ฌ์ฑ์ด๋ ํจ์ ์ค๋ณต ์ฌ์ฉ์ ์ ์ฌ์ฑ์ ํ์ ์ ํ๋ฆฌ์ผ์ด์ ํน์ํ๋ ํจ์ํ ํฉ์ฑ์ผ๋ก ํด๊ฒฐํ ์ ์๋ค. 3. ๊ณ ์ฐจ์ ํจ์๋ฅผ ํตํด ๊ตฌ์กฐ์ ์ ์ฌ์ฑ๊ณผ ์จ์ ๋ฃจํ๋ฅผ ์ ๊ฑฐํ ์ ์์ง๋ง, ๊ณผ๋ํ ์ถ์ํ๋ ๋ค๋ฅธ ํ๋ก๊ทธ๋๋จธ๋ค์๊ฒ ์ง์ ์ฅ๋ฒฝ์ ๋์ผ ์ ์์์ ์ ์ํ์. ํจ์ํ ์ฐ์ฐ์๋ฅผ ํ์ฉํ ์ค๋ณต ์ ๊ฑฐ ํจ์ํ ์ฐ์ฐ์๋ฅผ ์ ๊ทน ํ์ฉํจ์ผ๋ก์จ, ์ค๋ณต์ ์ ๊ฑฐํ๊ณ DRY ์์น์ ์งํฌ ์ ์๋ค. DRY ์์น์ Don't Repeat Yourself ์ ์ฝ์๋ก, ์ฝ๋๊ฐ ์ง์์ ๋ณด๊ดํ๋ ๋ฐฉ์์ด๋ผ๋ ์ดํด์ ๋ฐํ์ ๋๋ค. ์ด์์ ..
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋ํด ์์๋ณด๋ฉฐ ์ด๋ฅผ C++ ๋ฅผ ์ด์ฉํ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ด๋ป๊ฒ ์ ์ฉํ๋ฉด ์ข์์ง ์์๋ณด๊ฒ ์ต๋๋ค. ํต์ฌ : 1. ๋ชจ๋ ํ๋ก๊ทธ๋จ์ ์์ ํจ์์ ์งํฉ์ผ๋ก ํํ๋ ์ ์์ผ๋ฉฐ, ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ด ์ํธ ์์ฉํ๋ ํจ์ ์งํฉ์ผ๋ก ์ ์ํ ์ ์๋ค. 2. ์ ๋ ฅ๊ณผ ์ถ๋ ฅ ์ค์ฌ์ผ๋ก ์ฌ๊ณ ํ๋ฉฐ, ์ค๊ฐ ๋จ๊ณ์ ๋ณํ ๊ณผ์ ์ ์ฐจ๋ก๋๋ก ๊ตฌํํด ๋ณด์. ํจ์ํ์ผ๋ก ์ฌ๊ณ ํ๊ธฐ ๋ชจ๋ ํ๋ก๊ทธ๋จ์ ์์ ํจ์์ ์งํฉ์ผ๋ก ํํ๋ ์ ์์ผ๋ฉฐ, ์ ๋ ฅ๊ณผ ์ถ๋ ฅ์ด ์ํธ ์์ฉํ๋ ํจ์ ์งํฉ์ผ๋ก ์ ์ํ ์ ์๋ค. ํจ์๋ฅผ ์ค๊ณํ ๋, ๋ค์ ์คํ ์ ๋ฐ์ผ๋ฉด ํจ์๋ฅผ ๊ฐ๋จํ๊ฒ ์ค๊ณํ ์ ์๋ค. ์ ๋ ฅ ๋ฐ์ดํฐ๋ก๋ถํฐ ์ถ๋ฐํ๋ค. ์ถ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ ์ํ๋ค. ์ผ๋ จ์ ์ ๋ ฅ ๋ฐ์ดํฐ๋ฅผ ์ถ๋ ฅ ๋ฐ์ดํฐ๋ก ๋ณํํ๋ ๊ฐ ๋จ๊ณ์ธ ๋ณํ ๊ณผ์ (์์ ํจ์)๋ฅผ ์ ์ํ๋ค. ์ฌ์ค ์ ๋ด์ฉ์..
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋ํด ์์๋ณด๋ฉฐ ์ด๋ฅผ C++ ๋ฅผ ์ด์ฉํ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ด๋ป๊ฒ ์ ์ฉํ๋ฉด ์ข์์ง ์์๋ณด๊ฒ ์ต๋๋ค. ํต์ฌ : 1. ํ์ ์ ํ๋ฆฌ์ผ์ด์ ์ N ๊ฐ์ ์ธ์๋ฅผ ๊ฐ์ง ๋๋ค์์ ํ๋์ ์ธ์๋ฅผ ๋ฐ์ธ๋ฉํด N-1 ๊ฐ์ ์ธ์๋ฅผ ๊ฐ์ง๋ ๋๋ค๋ก ๋ณํํ๋ ์ฐ์ฐ์ ์๋ฏธํ๋ค. 2. ์ปค๋ง์ N ๊ฐ์ ์ธ์๋ฅผ ๊ฐ์ง ํจ์๋ฅผ ํ๋์ ์ธ์๋ฅผ ๊ฐ์ง ํจ์ N ๊ฐ๋ก ๋ถํดํ๋ ๊ณผ์ ์ ์๋ฏธํ๋ค. 3. ํ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ปค๋ง์ ์ด์ฉํ๋ฉด ์ค๋ณต์ ์ ๊ฑฐํ ์ ์๊ณ , ๋ ๋ฒ์ฉ์ ์ธ ์ฝ๋๋ฅผ ์์ฑํ ์ ์๋ค. ์ฐ๋ฆฌ๋ ์ด๋ฒ ๊ธ์์ ํ์ ์ ํ๋ฆฌ์ผ์ด์ ๊ณผ ์ปค๋ง์ ๋ฐฐ์ฐ๋ฉฐ, ์ด ๋ ๊ฐ์ง๊ฐ ์ด๋ป๊ฒ ์ฐ๊ด๋์๋์ง ์์๋ณผ ๊ฒ์ด๋ค. ํ์ ์ ํ๋ฆฌ์ผ์ด์ ํ์ ์ ํ๋ฆฌ์ผ์ด์ ์ด๋, N ๊ฐ์ ์ธ์๋ฅผ ๊ฐ์ง๋ ๋๋ค์์ ํ๋์ ์ธ์๋ฅผ ๋ฐ์ธ๋ฉํด N-1 ๊ฐ์ ์ธ์๋ฅผ ๊ฐ์ง๋ ๋๋ค๋ฅผ..
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋ํด ์์๋ณด๋ฉฐ ์ด๋ฅผ C++ ๋ฅผ ์ด์ฉํ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ด๋ป๊ฒ ์ ์ฉํ๋ฉด ์ข์์ง ์์๋ณด๊ฒ ์ต๋๋ค. ํต์ฌ : 1. ํจ์(๋๋ค)๋ ๊ฐ์ด๋ค. ๊ณ ๋ก ํจ์๋ ์ธ์๋ก ์ ๋ฌํ ์ ์๊ณ , ๋๋ค๋ฅผ ๋ฐํํ ์ ์์ผ๋ฉฐ ๋๋ค๋ ๋๋ค๋ฅผ ๋ฐํํ ์ ์๋ค. 2. ์์ ํจ์์ ์กฐํฉ์ ํตํ ์ค๊ณ๋ ๋ถ๋ณ์ฑ์ ๋ณด์ฅํ๋ค. ์ฐ๋ฆฌ๋ ๊ฐ๋จํ ๋๋ค๋ฅผ ์กฐํฉํ์ฌ ๊ณ ์ฐจ์์ ํฉ์ฑ ํจ์๋ฅผ ๋ง๋ค์ด๋ผ ์ ์๋ค. 3. ํจ์ํ ํฉ์ฑ์ ํตํด ์ค๋ณต์ ํจ๊ณผ์ ์ผ๋ก ์ ๊ฑฐํ ์ ์๋ค. ๋ํ ์ฌ๋ฌ ์ธ์๋ฅผ ๊ฐ์ง ๋๋ค๋ ํ๋์ ์ธ์์ ์บก์ณ๋ ๊ฐ๋ค์ ๊ฐ์ง ๋ค์์ ๋๋ค๋ก ๋ถํดํ ์ ์๋ค. ํจ์ํ ํฉ์ฑ ์ฐ๋ฆฌ๋ ๊ณ ๋ฑํ๊ต ์๊ฐ์ ํจ์ ํฉ์ฑ์ ๋ํด ๋ฐฐ์ ๋ค(ํน์ ์คํ๊ต์ผ์๋ ์๋ค). ๋๋๊ฒ๋, ์ฐ๋ฆฌ๋ C++ ์์ ๋์ผํ ์์ ์ ํ ์ ์๋ค. ๐ ์ฐ๋ฆฌ๋ ์ด์ ๋๋ค๋ฅผ ..
ํจ์ํ ํ๋ก๊ทธ๋๋ฐ ํจ๋ฌ๋ค์์ ๋ํด ์์๋ณด๋ฉฐ, ์ด๋ฅผ C++ ๋ฅผ ์ด์ฉํ ์ํํธ์จ์ด ๊ฐ๋ฐ์ ์ด๋ป๊ฒ ์ ์ฉํ๋ฉด ์ข์์ง ์์๋ณด๊ฒ ์ต๋๋ค. ํต์ฌ : 1. ํจ์๋ ๊ฐ์ด๋ค. ํจ์๋ ์ธ์๋ก ์ ๋ฌํ ์ ์๋ค. ๊ฐ๋จํ ํจ์๋ฅผ ์กฐํฉํด ๋ ํฌ๊ณ ๋ณต์กํ ํจ์๋ฅผ ๋ง๋ค ์ ์๋ค. 2. ์์ ํจ์์ ์กฐํฉ์ ํตํ ์ค๊ณ๋ ๋ถ๋ณ์ฑ์ ๋ณด์ฅํ๋ค. 3. ๋๋ค๋ฅผ ์์ ํจ์์ฒ๋ผ ์ฌ์ฉํ์. ๋ํ ์บก์ณ์ ๋ํด ๋ช ํํ ์์๋์. ์ฌ์ค ํ์๋ ํ๋ถ ๊ณผ์ ๋ ํ๋ก๊ทธ๋๋ฐ ์ธ์ด ๊ด๋ จ ์์ ์ ๋ค์ผ๋ฉฐ ํจ์ํ ์ธ์ด๋ฅผ ์ ํ์ง๋ง, ๊ทธ ๋น์์๋ ํ๋ก๊ทธ๋๋ฐ ์์ฒด์ ๋ํ ํฅ๋ฏธ๊ฐ ๊ทธ๋ค์ง ์์ด์ ๊ทธ๋ฐ์ง ํฐ ๊ด์ฌ์ ๊ฐ์ง ์์๋ค. ์ด์ฌํ ํ์ง๋ ์์๊ณ . ๐ ๊ทธ๋ฌ๋ค ๋ณด๋ ํจ์ํ ์ธ์ด์ ๋ํ ์ง์์ ๋จธ๋ฆฌ ์ ์ด๋ ๊ตฌ์์ ์์ ๋จผ์ง๋ง์ ์์งํ๊ณ ์์๋ค. ๊ทธ๋ฌ๋ค ๋ค์ ์ด ์ฑ ์ ์ฝ์ผ๋ฉด์ ํจ์ํ..