λͺ©λ‘μ 체 κΈ (1103)
KoreanFoodie's Study
[C++ κ²μ μλ²] 3-5. UDP μλ² μ€μ΅ ν΅μ¬ : 1. UDP λ TCP μ λ€λ₯΄κ², ν¨ν· κ°μ κ²½κ³κ° μκ³ μλκ° λΉ λ₯΄λ€. λ€λ§ ν¨ν·μ μμκ° λ³΄μ₯λμ§ μμΌλ©°, λ°μ΄ν°κ° μ μ€λ μνμ΄ μ‘΄μ¬νλ€. 2. UDP μ€μ΅μ κ²½μ°, TCP μ€μ΅ μ½λμμ ::connect μ ::listen λ§ μμΌλ©΄ λ‘μ§μ κ±°μ λμΌνλ€. 3. UDP λ Connected UDP(μΌμ’ μ μ¦κ²¨μ°ΎκΈ° κΈ°λ₯)μ νμ©νλ©΄, sendto λμ send λ₯Ό, recvfrom λμ recv λ₯Ό μ¬μ©νμ¬ API λ₯Ό λ κ°λ¨νκ² μ¬μ© κ°λ₯νλ€. μ λ²μλ TCP λ°©μμΌλ‘ λ°μ΄ν°λ₯Ό μ μ‘νλ μ€μ΅μ νμΌλ, μ΄λ²μλ UDP λ°©μμΌλ‘ λ°μ΄ν°λ₯Ό μ μ‘ν΄ λ³΄μ. μ¬μ€ 그리 λ€λ₯΄μ§λ μλ€. μ‘°κΈ κ°μνλμλ€κ³ νλ©΄ λ κΉ? 3-2 μ 보면 κΈ°λ³Έμ μΌλ‘ μμΌ..
[C++ κ²μ μλ²] 3-4. TCP vs UDP ν΅μ¬ : 1. TCP μ UDP λ λ€νΈμν¬ νλ‘ν μ½ μ€, νΈλμ€ν¬νΈ λ μ΄μ΄μ ν΄λΉνλ κ·μΉμ΄λ€. 2. TCP λ μμ νλ©°(λ°μ΄ν° μ μ€μ΄ μμ), λ°μ΄ν°μ μμκ° λ³΄μ₯λλ€. νμ§λ§ κ° ν¨ν·μ κ²½κ³(Boundary)κ° μμ΄ λ°μ΄ν°κ° ν©μ³μ§κ±°λ μͺΌκ°μ§ μ μμΌλ©°, UDP μ λΉν΄ μλμ μΌλ‘ λ리λ€. 3. UDP λ λΉ λ₯΄λ©°(μΌλ¨ λ°μ΄ν°λ₯Ό 보λ΄κ³ λ΄), ν¨ν·μ κ²½κ³κ° μμ΄ λ°μ΄ν°κ° μͺΌκ°μ§κ±°λ ν©μ³μ§μ§ μλλ€. νμ§λ§ ν¨ν· μ μ‘μ μμκ° λ³΄μ₯λμ§ μμΌλ©°, λ°μ΄ν°κ° μ μ€λ μνμ±μ΄ μλ€. μ΄λ² κΈμμλ κ°λ¨ν TCP μ UDP μ μ°¨μ΄μ λν΄ μμ보λλ‘ νμ. λ€νΈμν¬ κ³΅λΆλ₯Ό κΉκ² νμ§ μμμ΄λ, μ€λ©°κ°λ©° κ·Έ λμ μ°¨μ΄μ λν΄μλ μκ² λλλ°, μ΄λ² κΈμμλ κ·Έμ ..
[C++ κ²μ μλ²] 3-3. TCP μλ² μ€μ΅ ν΅μ¬ : 1. TCP μμλ μ‘μμ λ²νΌκ° μ‘΄μ¬νλ©°, ν΅μ μ ν λ λ²νΌμ λ°μ΄ν°λ₯Ό λ΄κ³ κΊΌλ΄λ λ°©μμΌλ‘ ν΅μ μ΄ μ΄λ£¨μ΄μ§λ€. 2. ν΄λΌμμ μ‘μ μ νλ €κ³ νλλ° μ‘μ λ²νΌκ° κ°λ μ°¨ μκ±°λ, μλ²μμ μμ μ νλ €κ³ νλλ° μμ λ²νΌκ° λΉμ΄ μμΌλ©΄ Blocking μνμ λμ νλ€. 3. μ κΈ°νκ²λ, λ²νΌ λ΄ κ° λ°μ΄ν° λ³λ‘λ λͺ νν κ²½κ³κ° μμ΄ λ°μ΄ν°λ ν©μ³μ§κ±°λ μͺΌκ°μ Έμ μΈμλ μ μλ€. μ λ²μ μμΌ νλ‘κ·Έλλ° κΈ°μ΄λ₯Ό λ€λ£¨λ©΄μ, μμΌμ λ§λ€κ³ , μ£Όμλ₯Ό ν λΉνκ³ , μμΌκ³Ό μ£Όμλ₯Ό ν λΉν ν, μ€μ λ‘ ν΅μ μ ν΄λ³΄λ μ€μ΅μ μ§ννλ€. μ΄λ² μκ°μλ TCP μ€μ΅μ ν΄ λ³Ό μμ μ΄λ€. μ½λμ PPT λ₯Ό 보면μ, μ€μ΅μ μ§νν΄ λ³΄μ. μΌλ¨ μ λ² μκ°μ μμΌ λ°μΈλ© μμ ..
[C++ κ²μ μλ²] 3-2. μμΌ νλ‘κ·Έλλ° κΈ°μ΄ #2 ν΅μ¬ : 1. μμΌ νλ‘κ·Έλλ° μ μ μλ μ¬λ¬ API λ€μ ν΅ν μΈν μ΄ νμνλ€. νμ§λ§ λ무 κ²λ¨Ήμ§ λ§κ³ , νλ¦λ§ μ΄ν΄νμ. 2. ν΄λΌμ΄μΈνΈ μͺ½μμλ νΈλν° κ΅¬μ (clientμμΌ μΈν )κ³Ό κ°κ²μ μμΉμ λ²νΈ(μλ² IP μ£Όμμ ν¬νΈ)λ₯Ό μμλΈ ν, μ°κ²°(::connect)μ μλνκΈ°λ§ νλ©΄ λλ€. 3. μλ² μͺ½μμλ νΈλν° κ΅¬μ (listen μμΌ μΈν ) ν, κ°κ²μ μμΉμ λ²νΈ(μλ² IP μ£Όμμ ν¬νΈ)λ₯Ό μ€μ ν ν, μλ΄μμ ν°μ κ°ν΅(μμΌκ³Ό μλ² μ£Όμ ::bind)νκ³ μμ μ μμ(::listen)νλ©΄ λλ€. μ΄μ μ λ²μ μ΄μΌκΈ°νλ κ°λ μ λ°νμΌλ‘, μ€μ μ½λλ₯Ό 보μ. μλ§ μ΅μμΉ μμ μ½λκ° μλ© λ±μ₯μ νκ² λ ν λ°, νλνλ μ λΆ μμμΌ νλ€..
[C++ κ²μ μλ²] 3-1. μμΌ νλ‘κ·Έλλ° κΈ°μ΄ #1 ν΅μ¬ : 1. μμΌ νλ‘κ·Έλλ°μ κ³ κ°(ν΄λΌμ΄μΈνΈ)μ κ°κ²(μλ²) κ΄κ³μ λΉμ νμ¬ κ°λ μ μ΄ν΄ν΄ λμ. λλμ΄ κΈ°λκΈ΄ Memory κ΄λ ¨ ν¬μ€ν μ λ§μΉκ³ , μ΄μ λ€νΈμν¬ νλ‘κ·Έλλ°μΌλ‘ λ€μ΄κ°λ€. λ¨Όμ μμΌ νλ‘κ·Έλλ°μ 본격μ μΌλ‘ μμνκΈ° μ μ, κ°λ¨ν κ°λ μ μ§κ³ λμ΄κ° 보μ. μ°Έκ³ λ‘, μ΄ν΄μλ μμκ° μ΅κ³ λ€. λ¨Όμ , μ°λ¦¬κ° μ€κ΅μ§μ μ νλ₯Ό νλ€κ³ ν΄ λ³΄μ. κ·Έλ°λ° μ΄ μ€κ΅μ§μ μ λͺ νκ³ ν° κ³³μ΄λΌ, μ νλ₯Ό λ°λ μλ΄ μμμ΄ λ°λ‘ μ‘΄μ¬νλ€. μ°λ¦¬λ μ€κ΅μ§μ λ±λ‘λ λν μ νλ‘ μ νλ₯Ό κ±Έκ³ , μ©κ±΄μ μ λ¬νλ€. κ·Έλ¬λ©΄ μλ΄μμ μ©κ±΄μ λ§λ μμ μμ λ²νΈλ₯Ό μλ €μ€λ€. κ·ΈλΌ μ΄μ λ€μλΆν°λ λν μ νλ₯Ό ν΅ν΄ μ€κ΅μ§μ μ°λ½ν νμ μμ΄, ν μ΄λΈμ μμ μλ μμ ..
[C++ κ²μ μλ²] 2-10. TypeCast ν΅μ¬ : 1. ν νλ¦Ώ λ©ν νλ‘κ·Έλλ°(TMP)λ‘ TypeCast λ₯Ό ꡬνν΄ λ³΄μ. static_cast λ₯Ό μ΄μ©ν΄ dynamic_cast μ ν¨κ³Όλ₯Ό λΌ μ μλ€! 2. TMP λ₯Ό μ¬μ©νλ©΄, μ»΄νμΌ νμμ νμ κ³Ό κ΄λ ¨λ κ°μ 미리 μ μ μλ€. 3. TypeCast κ° κ°λ₯νμ§ μ¬λΆλ₯Ό νλ ¬μ μ μ₯νμ¬ μ¬μ©ν κ²μ΄λ―λ‘ μλκ° λ§€μ° λΉ λ₯΄λ©°, shared_ptr μλ μ¬μ©ν μ μλ€! μ λͺ©μ TypeCast μ§λ§, μ€λμ... μ¦κ±°μ΄ νλ§λ² μκ°μ΄λ€! νλ§λ²... μλ, ν νλ¦Ώ λ©ν νλ‘κ·Έλλ°(Template Meta Programming; μ€μ¬μ TMP λΌκ³ ν κ²)μΌλ‘, λ€μν νμ κ°μ Casting μ μ§μ λ§λ€μ΄ λ³Ό κ²μ΄λ€. μ.. κ·Έλ° κ²μ νλκ³ ? μ..
보νΈλμ΄ μλ κΈμ λλ€.
[C++ κ²μ μλ²] 2-9. Object Pool ν΅μ¬ : 1. ObjectPool μ μ¬μ©νλ©΄, κ° νμ λ³λ‘ νμ λ§λ€κ² λμ΄, λ©λͺ¨λ¦¬ μ€μΌ μ΄μκ° λ°μνμ λ λ¬Έμ μ μμΈμ νμ νκΈ°κ° μ¬μμ§λ€. 2. 컀μ€ν ν μμ μλ₯Ό κ°μ²΄ λ©λͺ¨λ¦¬λ₯Ό νμ λ°λ©νλ νμμ λ£μ MakeShared λ₯Ό νμ©νλ©΄, ObjectPool μ μ¬μ©νλ μ€λ§νΈ ν¬μΈν°λ₯Ό μ½κ² λ§λ€ μ μλ€. 3. Allocator λ₯Ό StompAllocator λ‘ μ½κ² κ΅μ²΄ν μ μλλ‘ #define λ¬Έλ²μ μ¬μ©νλ©΄, ν μ€νΈμ©μΌλ‘ StompAllocator λ₯Ό μ½κ² μ μ© κ°λ₯νλ€. μ°λ¦¬λ μ΄μ κΉμ§ λ©λͺ¨λ¦¬ νμ λν΄ μμ보μλλ°, λ©λͺ¨λ¦¬ νμ λ©λͺ¨λ¦¬ ν¬κΈ°μ λ°λΌ κ°μ²΄λ€μ΄ μμμ νμ κ°μ΄ μ¬μ©νλ€. μ§λ¨ μνμ΄ μΌλ κ·Έλ λ―, κΈ°μμ¬ μνμμλ λ¬Έμ ..
C++ μ λν΄ κ³΅λΆν κ²κ³Ό, κ°λ°νλ©΄μ μκ² λ κ²λ€μ λ€λ£Ήλλ€ μμ±μλ₯Ό private νκ² λ§λ λ€κ³ ? μ€λ§νΈ ν¬μΈν°μ λ°°μ°λ€ 보면, make_shared μ new λ₯Ό μ΄μ©ν΄ μ€λ§νΈ ν¬μΈν°λ₯Ό λ§λλ λ°©μμ λν΄ λ°°μ°κ² λλ€. μ΄λ, ν¨μ¨μ±μ μν΄ make_shared λ₯Ό new λ³΄λ€ μ νΈνλΌλ λ§μ λ£κ² λλλ°, κ·Έ μ΄μ λ λͺ ννλ€(ν ν λΉμ΄ 2λ² λμ 1λ² μ΄λ£¨μ΄μ§λ©°, κ°μ λ©λͺ¨λ¦¬ μ‘°κ°μ λμ΄λ λ°λ€κ°, new μμ μμΈκ° λ°μνμ λμ λ©λͺ¨λ¦¬ λμλ λ§μ μ μμΌλκΉ). κ·Έλ°λ°... κ·ΈλΌμλ λΆκ΅¬νκ³ new λ₯Ό μ¬μ©ν΄μΌ νλ κ²½μ°λ₯Ό 보면, ν¬κ² 2κ°μ§ μ΄μ κ° λμ¨λ€. 컀μ€ν μμ μλ₯Ό μ¬μ©νλ κ²½μ° μμ±μκ° private μΈ κ²½μ° 100λ² μ보ν΄μ, 1λ²μ κ·Έλ λ€ μ³λ, 2λ²μ μ§κ΄μ μΌλ‘ μλΏμ§κ° ..
[C++ κ²μ μλ²] 2-8. λ©λͺ¨λ¦¬ ν #3 ν΅μ¬ : 1. λ§μ΄ν¬λ‘μννΈμμλ, LockFreeStack μ ꡬνν΄μ μ΄λ―Έ μ 곡νκ³ μλ€ : SLIST_ENTRY 2. LockFreeStack μ μ€μ§μ μΌλ‘ Lock-Based ꡬνμ λΉν΄ μμ² λΉ λ₯΄κ±°λ ν 건 μλμ§λ§, μΌλ¨ μ¬μ©νκ² λλ©΄ μ λ¬Έμ©μ΄λ‘ 'κ°μ§'κ° λλ€. μ λ² μκ°μλ LockFreeStack μ μ΄μ©ν΄ Memory Pool μ μ¬μ©ν λ, κ°κ°μ entry μ λΆνμν λ©ν μ 보λ₯Ό λ΄λ κ²μ λ°©μ§ν μ μμλ€. λ©ν μ 보λ Header μλ§ μμΌλ©΄ λκΈ° λλ¬Έμ΄λ€(μνΈλ¦¬μ κ°―μκ° λ무 λ§μ§λ§ μμΌλ©΄). κ·Έλ°λ° μΌλ°μ μΌλ‘λ μ°λ¦¬κ° μ§μ λ§λ κ²μ μ¬μ©νμ§ μκ³ , μλμ°μμ λ§λ€μ΄μ€ SLIST_ENTRY λ₯Ό μ¬μ©νλ€. μ€μ μ½λλ₯Ό 보μ. ty..