๋ชฉ๋ก์ ์ฒด ๊ธ (1099)
KoreanFoodie's Study
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) ๋ฅผ ๋ฐ์ธ..
์ด๋์ฐ๋์ '์ด๋์ฐ์ ๊ฒ์์ํ' ์ฑ ์ ๋ณด๋ฉฐ ์ข์ ๋ด์ฉ์ ์ ๋ฆฌํ๊ณ ์์ต๋๋ค. ๋ ์์ธํ ๋ด์ฉ์ด ๊ถ๊ธํ์๋ค๋ฉด, ์ฑ ์ ๊ตฌ๋งคํด ์ง์ ์ฝ์ด๋ณด์๊ธฐ๋ฅผ ์ถ์ฒ๋๋ฆฝ๋๋ค! ๋ณํ ํ๋ ฌ์ ์ญํ๋ ฌ ๋ค์ํ ๋ณํ ํ๋ ฌ๋ค์ ์ญํ๋ ฌ์ ์์๋ณด์. ํฌ๊ธฐ ๋ณํํ๋ ฌ ๊ฐ ๊ธฐ์ ๋ฒกํฐ์ ํฌ๊ธฐ๋ฅผ ๊ฐ๊ฐ a, b ๋งํผ ํค์ฐ๋ ํฌ๊ธฐ ๋ณํํ๋ ฌ์ ์ญํ๋ ฌ์ ๋ค์๊ณผ ๊ฐ๋ค. ์ ๋จ ๋ณํํ๋ ฌ ํํ์ฌ๋ณํ ์ฒ๋ผ ๋ฏธ๋๋ฌ์ง๊ฒ ์๊ธด ์ ๋จ ๋ณํํ๋ ฌ์ ์ญํ๋ ฌ์ ๋ค์๊ณผ ๊ฐ๋ค. ํ์ ๋ณํํ๋ ฌ ํ์ ๋ณํํ๋ ฌ์ ์ญํ๋ ฌ์ ๋ค์๊ณผ ๊ฐ๋ค. θ ๋งํผ ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ์ํค๋ ํ๋ ฌ์ ์ญํ๋ ฌ์ ๊ตฌํ๊ธฐ ์ํด์๋, -θ ๋งํผ ๋ฐ์๊ณ ๋ฐฉํฅ์ผ๋ก ํ์ ์ํค๋ ํ๋ ฌ์ ์๊ฐํด๋ณด๋ฉด ๋๋ค! ์ผ๊ฐํจ์์ ์ฑ์ง์ ์ด์ฉํ๋ฉด ๊ฐ๋จํ ๊ตฌํ ์ ์๋ค.
์ฝ ๋ ๋ฌ๊ฐ ์ฝ์ผ๋ฉฐ ์ ๋ฆฌํ๊ณ ์์ฝํ Effective C++ ์ Effective Modern C++ ๊ฒ์๊ธ๋ค์ ๋ํ ๋ฆฌ์คํธ ์์ฝ๊ธ์ ๋๋ค. ๊ฐ๋ฐํ์ค๋ ์ฐธ๊ณ ํ์๊ธธ ๋ฐ๋ผ๋ฉฐ, ์ง์ ์ฌ์ ์ฝ์ด๋ณด์๊ธธ ๊ฐ์ถ๋๋ฆฝ๋๋ค! 1์ฅ ํ์ ์ฐ์ญ ํญ๋ชฉ 1: ํ ํ๋ฆฟ ํ์ ์ฐ์ญ ๊ท์น์ ์์งํ๋ผ ํญ๋ชฉ 2: auto์ ํ์ ์ฐ์ญ ๊ท์น์ ์์งํ๋ผ ํญ๋ชฉ 3: decltype์ ์๋ ๋ฐฉ์์ ์์งํ๋ผ ํญ๋ชฉ 4: ์ฐ์ญ๋ ํ์์ ํ์ ํ๋ ๋ฐฉ๋ฒ์ ์์๋๋ผ 2์ฅ auto ํญ๋ชฉ 5: ๋ช ์์ ํ์ ์ ์ธ๋ณด๋ค๋ auto๋ฅผ ์ ํธํ๋ผ ํญ๋ชฉ 6: auto๊ฐ ์์น ์์ ํ์์ผ๋ก ์ฐ์ญ๋ ๋์๋ ๋ช ์์ ํ์์ ์ด๊ธฐ์น๋ฅผ ์ฌ์ฉํ๋ผ 3์ฅ ํ๋์ C++์ ์ ์ํ๊ธฐ ํญ๋ชฉ 7: ๊ฐ์ฒด ์์ฑ ์ ๊ดํธ(())์ ์ค๊ดํธ({})๋ฅผ ๊ตฌ๋ถํ๋ผ ํญ๋ชฉ 8: 0๊ณผ NULL๋ณด๋ค nullptr๋ฅผ ์ ..
์ฝ ๋ ๋ฌ๊ฐ ์ฝ์ผ๋ฉฐ ์ ๋ฆฌํ๊ณ ์์ฝํ Effective C++ ์ Effective Modern C++ ๊ฒ์๊ธ๋ค์ ๋ํ ๋ฆฌ์คํธ ์์ฝ๊ธ์ ๋๋ค. ๊ฐ๋ฐํ์ค๋ ์ฐธ๊ณ ํ์๊ธธ ๋ฐ๋ผ๋ฉฐ, ์ง์ ์ฌ์ ์ฝ์ด๋ณด์๊ธธ ๊ฐ์ถ๋๋ฆฝ๋๋ค! Chapter 1 C++์ ์์ผ๋ฉด C++์ ๋ฒ์ ๋ฐ๋ฆ ์๋ค ํญ๋ชฉ 1: C++๋ฅผ ์ธ์ด๋ค์ ์ฐํฉ์ฒด๋ก ๋ฐ๋ผ๋ณด๋ ์๋ชฉ์ ํ์ ํญ๋ชฉ 2: #define์ ์ฐ๋ ค๊ฑฐ๋ const, enum, inline์ ๋ ์ฌ๋ฆฌ์ ํญ๋ชฉ 3: ๋์๋ง ๋ณด์ด๋ฉด const๋ฅผ ๋ค์ด๋ ๋ณด์! ํญ๋ชฉ 4: ๊ฐ์ฒด๋ฅผ ์ฌ์ฉํ๊ธฐ ์ ์ ๋ฐ๋์ ๊ทธ ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํ์ Chapter 2 ์์ฑ์, ์๋ฉธ์ ๋ฐ ๋์ ์ฐ์ฐ์ ํญ๋ชฉ 5: C++๊ฐ ์๊ทผ์ฌ์ฉ ๋ง๋ค์ด ํธ์ถํด ๋ฒ๋ฆฌ๋ ํจ์๋ค์ ์ด๊ฐ์ ์ธ์ฐ์ ํญ๋ชฉ 6: ์ปดํ์ผ๋ฌ๊ฐ ๋ง๋ค์ด๋ธ ํจ์๊ฐ ํ์ ์์ผ๋ฉด ํ์คํ ์ด๋ค์ ์ฌ์ฉ์ ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 42 : ์ฝ์ ๋์ ์์ฑ ์ฝ์ ์ ๊ณ ๋ คํ๋ผ ํต์ฌ : 1. ์ด๋ก ์ ์ผ๋ก, ์์ฑ ์ฝ์ ํจ์๋ค์ ์ข ์ข ํด๋น ์ฝ์ ๋ฒ์ ๋ณด๋ค ๋ ํจ์จ์ ์ด์ด์ผ ํ๋ฉฐ, ๋ ํจ์จ์ ์ธ ๊ฒฝ์ฐ๋ ์ ๋๋ก ์์ด์ผ ํ๋ค. 2. ์ค์ง์ ์ผ๋ก, (1) ์ถ๊ฐํ ๊ฐ์ด ์ปจํ ์ด๋์ ๋ฐฐ์ ๋๋ ๊ฒ์ด ์ปจํ ์ด๋์ ๋ฐฐ์ ๋๋ ๊ฒ์ด ์๋๋ผ ์ปจํ ์ด๋ ์์์ ์์ฑ๋๊ณ , (2) ์ธ์ ํ์(๋ค)์ด ์ปจํ ์ด๋๊ฐ ๋ด๋ ํ์๊ณผ ๋ค๋ฅด๊ณ , (3) ๊ทธ ๊ฐ์ด ์ค๋ณต๋ ๊ฐ์ด์ด๋ ์ปจํ ์ด๋๊ฐ ๊ฑฐ๋ถํ์ง ์๋๋ค๋ฉด, ์์ฑ ์ฝ์ ํจ์๊ฐ ์ฝ์ ํจ์๋ณด๋ค ๋น ๋ฅผ ๊ฐ๋ฅ์ฑ์ด ์์ฃผ ํฌ๋ค. 3. ์์ฑ ์ฝ์ ํจ์๋ ์ฝ์ ํจ์๋ผ๋ฉด ๊ฑฐ๋ถ๋นํ์ ํ์ ๋ณํ๋ค์ ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 41 : ์ด๋์ด ์ ๋ ดํ๊ณ ํญ์ ๋ณต์ฌ๋๋ ๋ณต์ฌ ๊ฐ๋ฅ ๋งค๊ฐ๋ณ์์ ๋ํด์๋ ๊ฐ ์ ๋ฌ์ ๊ณ ๋ คํ๋ผ ํต์ฌ : 1. ์ด๋์ด ์ ๋ ดํ๊ณ ํญ์ ๋ณต์ฌ๋๋ ๋ณต์ฌ ๊ฐ๋ฅ ๋งค๊ฐ๋ณ์์ ๋ํด์๋ ๊ฐ ์ ๋ฌ์ด ์ฐธ์กฐ ์ ๋ฌ๋งํผ์ด๋ ํจ์จ์ ์ด๊ณ , ๊ตฌํํ๊ธฐ๊ฐ ๋ ์ฝ๊ณ , ์ฐ์ถ๋๋ ๋ชฉ์ ์ฝ๋์ ํฌ๊ธฐ๋ ๋ ์๋ค. 2. ์ผ๊ฐ ์ธ์์ ๊ฒฝ์ฐ ๊ฐ ์ ๋ฌ(์ฆ, ๋ณต์ฌ ์์ฑ) ๋ค์์ ์ด๋ ๋ฐฐ์ ์ ์ฐธ์กฐ ์ ๋ฌ ๋ค์์ ๋ณต์ฌ ๋ฐฐ์ ๋ณด๋ค ํจ์ฌ ๋น์ ๊ฐ๋ฅ์ฑ์ด ์๋ค. 3. ๊ฐ ์ ๋ฌ์์๋ ์๋ฆผ ๋ฌธ์ ๊ฐ ๋ฐ์ํ ์ ์์ผ๋ฏ๋ก, ์ผ๋ฐ์ ์ผ๋ก ๊ธฐ๋ฐ ํด๋์ค ๋งค๊ฐ๋ณ์ ํ์์ ๋ํด์๋ ๊ฐ ์ ๋ฌ์ด ์ ํฉํ์ง ์๋ค. Widget ํด๋..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 40 : ๋์์ฑ์๋ std::atomic ์ ์ฌ์ฉํ๊ณ , volatile ์ ํน๋ณํ ๋ฉ๋ชจ๋ฆฌ์ ์ฌ์ฉํ๋ผ. ํต์ฌ : 1. std::atomic ์ ๋ฎคํ ์ค ๋ณดํธ ์์ด ์ฌ๋ฌ ์ค๋ ๋๊ฐ ์ ๊ทผํ๋ ์๋ฃ๋ฅผ ์ํ ๊ฒ์ผ๋ก, ๋์์ ์ํํธ์จ์ด์ ์์ฑ์ ์ํ ๋๊ตฌ์ด๋ค. 2. volatile ์ ์ฝ๊ธฐ์ ๊ธฐ๋ก์ ์ต์ ํ๋ก ์ ๊ฑฐํ์ง ๋ง์์ผ ํ๋ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ์ํ ๊ฒ์ผ๋ก, ํน๋ณํ ๋ฉ๋ชจ๋ฆฌ๋ฅผ ๋ค๋ฃฐ ๋ ํ์ํ ๋๊ตฌ์ด๋ค. std::atomic ์ ๋ณดํต ๋ฎคํ ์ค๋ณด๋ค ๋ ํจ์จ์ ์ธ ๊ธฐ๊ณ์ด ๋ช ๋ น๋ค๋ก ๊ตฌํ๋๋ค. std::atomic ์ ์ฌ์ฉํ๋ ๋ค์ ์์ ์ฝ๋๋ฅผ ๋ณด์. std::atomi..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 39 : ๋จ๋ฐ์ฑ ์ฌ๊ฑด ํต์ ์๋ void ๋ฏธ๋ ๊ฐ์ฒด๋ฅผ ๊ณ ๋ คํ๋ผ ํต์ฌ : 1. ๊ฐ๋จํ ์ฌ๊ฑด ํต์ ์ ์ํํ ๋, ์กฐ๊ฑด ๋ณ์ ๊ธฐ๋ฐ ์ค๊ณ์๋ ์ฌ๋ถ์ ๋ฎคํ ์ค๊ฐ ํ์ํ๊ณ , ๊ฒ์ถ ๊ณผ์ ์ ๋ฐ์ ๊ณผ์ ์ ์งํ ์์์ ์ ์ฝ์ด ์์ผ๋ฉฐ, ์ฌ๊ฑด์ด ์ค์ ๋ก ๋ฐ์ํ๋์ง๋ฅผ ๋ฐ์ ๊ณผ์ ๊ฐ ๋ค์ ํ์ธํด์ผ ํ๋ค. 2. ํ๋๊ทธ ๊ธฐ๋ฐ ์ค๊ณ๋ฅผ ์ฌ์ฉํ๋ฉด ๊ทธ๋ฐ ๋จ์ ๋ค์ด ์์ง๋ง, ๋์ ์ฐจ๋จ์ด ์๋๋ผ ํด๋ง์ด ์ผ์ด๋๋ค๋ ๋จ์ ์ด ์๋ค. 3. ์กฐ๊ฑด ๋ณ์์ ํ๋๊ทธ๋ฅผ ์กฐํฉํ ์๋ ์์ผ๋, ๊ทธ๋ฐ ์กฐํฉ์ ์ด์ฉํ ํต์ ๋ฉ์ปค๋์ฆ์ ํ์ ์ด์์ผ๋ก ๋ณต์กํ๋ค. 4. std::promise ์ ๋ฏธ๋ ๊ฐ์ฒด๋ฅผ ์ฌ์ฉ..
C++ ํ๋ก๊ทธ๋๋จธ์ ํ๋ ์์ด์ ๋ฐ์ด๋ธ์ธ, ์ค์ฝง ๋ง์ด์ด์ค์ Modern Effective C++ ๋ฅผ ์ฝ๊ณ ๊ธฐ์ตํ ๋ด์ฉ์ ์์ฝํ๊ณ ์์ต๋๋ค. ๊ผญ ์ฝ์ด๋ณด์๊ธธ ์ถ์ฒ๋๋ฆฝ๋๋ค! ํญ๋ชฉ 38 : ์ค๋ ๋ ํธ๋ค ์๋ฉธ์๋ค์ ๋ค์ํ ํ๋ ๋ฐฉ์์ ์ฃผ์ํ๋ผ ํต์ฌ : 1. ๋ฏธ๋ ๊ฐ์ฒด์ ์๋ฉธ์๋ ๊ทธ๋ฅ ๋ฏธ๋ ๊ฐ์ฒด์ ์๋ฃ ๋ฉค๋ฒ๋ค์ ํ๊ดดํ ๋ฟ์ด๋ค. 2. std::async ๋ฅผ ํตํด ์๋๋ ๋น์ง์ฐ ๊ณผ์ ์ ๋ํ ๊ณต์ ์ํ๋ฅผ ์ฐธ์กฐํ๋ ๋ง์ง๋ง ๋ฏธ๋ ๊ฐ์ฒด์ ์๋ฉธ์๋ ๊ทธ ๊ณผ์ ๊ฐ ์๋ฃ๋ ๋๊น์ง ์ฐจ๋จ๋๋ค(๊ธฐ๋ค๋ฆฐ๋ค). ํฉ๋ฅ ๊ฐ๋ฅ std::thread ๋ ๋ฐํ ์์คํ ์ ์คํ ์ค๋ ๋์ ๋์๋๋ค. ๊ทธ์ ๋น์ทํ๊ฒ ์ง์ฐ๋์ง ์์ ๊ณผ์ ์ ๋ํ ๋ฏธ๋ ๊ฐ์ฒด๋ ์์คํ ์ค๋ ๋์ ๋์๋๋ค. ๋ฐ๋ผ์ std::thread ๊ฐ์ฒด์ ๋ฏธ๋ ๊ฐ์ฒด ๋ชจ๋ ์์คํ ์ค๋ ๋์ ๋ํ ํธ๋ค(ha..