본문 바로가기
반응형

전체 글51

[06~08주차] Non-Blocking 알고리즘 - LIST - SET : 아이템의 중복을 허용하지 않음 : 정렬되어 저장됨 (unordered_set이 아님) - 검색 효율 증가 : 삽입 삭제의 효율성을 위해 링크드리스트 구현 : 구현 ) add, remove, contains : 필드 ) 리스트에 저장되는 값  : 메서드 - add(x) : 집합에 x추가, 성공 시 true - remove(x) : 집합에서 x 제거, 성공 시 true - contains(x) : 집합에 x가 있다면 true  : 추가 구현 ) 보초 노드 - 검색 효율을 위해 항상 존재하는 Head(MAXINT)와 Tail노드(-MAXINT)를 갖도록 함   - 성긴 동기화 : 리스트는 하나의 잠금을 가짐 : 모든 매서드 호출은 이 잠금을 통해 Critical Section으로 진행됨 ( = .. 2024. 4. 25.
[05주차] 동기화 연산 & CAS - Lock-free 자료구조 : 여러 개의 쓰레드에서 동시에 호출했을 때에도 정해진 단위 시간마다 적어도 한 개의 호출이 완료되는 알고리즘  : Non-blocking이 보장되어야 함 : 알고리즘 내에 Lock이 있으면 당연히 Lock-free X, Lock이 없다고 해도 무조건 Lock-free인 것은 아님 : Lock이 존재하는 경우 다른 쓰레드를 실행할 수 없어 싱글 쓰레드와 다를 바가 없음     → wait-free를 유지하며, 메모리로 Atomic Memory를 만들 수 있는 알고리즘 존재? : 존재, 이 강의에서 생략.  → wait-free를 유지하며, 기존 씽글 스레드 자료구조도 Atomic Memory를 사용해 멀티쓰레드 자료구조로 변환 가능? : 불가능하다.. 2024. 4. 24.
[도서 / Book] 급변하는 시대 속 당신은 어떤 리더인가? - 「 리더의 본질 」 도서 기록 | 03 「리더의 본질 」 저자 : 홍의숙 지음 출판 : 다산북스 우리는 살아가면서 꽤 많은 조직을 경험한다고 생각합니다 저는 23살로 지금까지의 과거를 돌아보면 매년 달라지는 학급이라는 공동체, 수많은 사람들 중 친한 친구에 속하는 집단, 혹은 동아리, 학생회 같은 단체 등 다양한 형태의 관계 속에서 어떨 때는 리더(이끌어가는 사람)로서 어떨 때는 팔로워로서의 역할을 맡아왔습니다 저는 보통 팔로워보다는 리더의 위치에 서서 항상 어떤 프로젝트를 이끌어갔던 것 같은데 여러분은 자신이 어떤 유형인 것 같나요? 제가 여러 번의 리더라는 자리를 맡아보며 느꼈던 것은 누군가를 이끌어 가기 위해선 그에 합당한 능력이 있어야 한다는 사실입니다 여기서 말하는 능력은 여러가지가 있겠는데 그 능력을 명확히 하기.. 2024. 4. 24.
[07주차] TEST & 시야처리 - TEST : Test의 필요성 1) 버그 없는 프로그램을 만들기 위해 2) MMORPG 게임 고유의 Test → 부하 테스트(Stress Test), 성능 측정 (동접) : Test의 단계 1) 작성자 테스트 / QA 테스트 2) 알파 테스트 (비 관계자를 동원, 같은 회사, 개발자의 가족/친구) 3) 클로즈드 베타 테스트 (불특정 다수 동원, 실제 부하 테스트의 시작) 4) 오픈 베타 테스트 (모든 사람 상대로 테스트) : Stree Test - 많은 인원이 동시에 접속해 테스트 진행, 적은 인원이었을 때 보이지 않은 버그들을 발견 가능 (멀티쓰레드!) - 서버 프로그램의 bottle-neck을 발견 가능 (DB, Network Overhead, Memory allocation Overhead, N.. 2024. 4. 23.
[06주차] 멀티쓰레드 01 - 성능 향상 1) 프로그램 최적화 2) 멀티 코어 활용 → 멀티쓰레드 프로그래밍 필요 - 멀티쓰레드 : 하나의 프로그램이 여러 곳이 동시 다발적으로 실행됨 (병렬처리) - 병렬처리 : 하나의 작업을 여러 개의 context에서 동시에 수행 : context - CPU 실행 상태 (PC를 포함한 모든 레지스터 값) : 한 대의 컴퓨터 사용 → SMP(여러 개의 CPU), Multi-Core (여러 개의 Core) : CPU 한 개 속도는 너무 느리기에 사용하는 것 (프로그램 구조가 깔끔해지진 않음) : 발열 속도에 부딪친 클럭 속도 증가 - 프로세스와 쓰레드 1) 프로세스 : 실행 중인 프로그램 - 하나의 프로세스는 하나의 실행 파일에서 출발 2) 쓰레드 : 프로그램 실행 흐름 - 프로세스 실행 중 프로.. 2024. 4. 22.
[05주차] IOCP - IOCP : 윈도우 I/O 모델 중 최고 성능 : 별도의 커널 객체 통해 구현 → IOCP 객체 생성 후 핸들 사용 : Overlapped I/O CallBack → Callback 함수들을 멀티쓰레드로 동시에 실행 : IOCP 객체 내부 Thread Pool 사용 → 쓰레드 생성 파괴 오버헤드 없앰 & 적은 수의 쓰레드로 많은 연결 관리 https://modoocode.com/285 씹어먹는 C++ - 모두의 코드 씹어먹는 C++ - 작성일 : 2019-05-19 이 글은 56939 번 읽혔습니다. 이번 강좌에서는에 대해 다룹니다.안녕하세요 여러분! 이번 강좌에서는 여태까지 modoocode.com : IOCP 객체 내부 Device List 사용 → 등록된 소켓에 대한 I/O는 IOCP가 처리 :.. 2024. 4. 22.
[04주차] I/O 모델 한국공학대학교 정내훈 교수님 4-1 게임 서버 프로그래밍 수업 중 일부입니다. - 게임 프로그램 특징 : 게임의 진행 속도는 CPU의 속도가 아니라 실제 시간. : REAL TIME → 내가 명령을 입력할 때까지 기다리지 않음!!!! (적어도 렌더링은 계속 됨) : INDEPENDENCE → 모든 객체가 독립적 행동 (게임 진행 정해져 있지 않음 + 플레이어 행동 안 기다림, non-blocking) - Non-blocking I/O : 기존 Blocking 소켓은 I/O 작업을 수행할 때 해당 작업이 완료될 때까지 대기 : Non-blocking → 작업 수행 시 작업이 완료되지 않아도 즉시 반환 : WSARecv() 호출을 즉시 완료하지 못하는 경우 1) 도착한 데이터 없으면, 2) WSAEWOULD.. 2024. 4. 22.
[02주차] 환경 - MMO Game Server : 고사양 필요 (가성비를 따져 저 사양의 여러 대로 동접을 올리지는 않음) : 많은 사람을 받을 수 있다 → 동접 UP → 재미 UP → 사용자가 더 몰림 → 수입 UP : CPU - 싱글 코어로는 동접 1000도 힘들다. 멀티 코어 사용 필수 : Memory - 128GB 이상 필요 (월드 정보, NPC/Monster 정보, 플레이어 정보 등) : Network - 여러 개의 네트워크 포트 필요 : HW만 좋으면 되는가? → 하드웨어를 충분히 이용할 수 있는 프로그래밍이 필요 : 하드웨어 지식 필요 → 하드웨어가 성능에 어떤 영향을 미치는지, 하드웨어의 성능을 최대한 이끌어내는 프로그래밍 등 - CPU : X86 계열, 서버용 CPU가 따로 존재함(Intel Xeon,.. 2024. 4. 19.
[04주차] 메모리 일관성 - CPU 주의점 : 저번 시간 상호 배제에 이어 메모리 일관성 문제도 고려해야 함 : 지금까지 프로그램은 공유 메모리에 대한 접근(읽기/쓰기)을 atomic하다고 가정함 → 컴파일러가 제대로 기계어로 번역했다면 → atomic : 메모리의 접근이 순간적으로 행해지며, 서로 겹치지 않고 실행 결과 순서가 정해지면, 모든 쓰레드에서 같은 순서로 보임 → 그러나 PC에서의 메모리 접근은 atomic이 아님 (메모리에 쓴 순서대로 메모리의 내용이 관측되지 않음)   : 0번 쓰레드도 false를 읽고 1번도 false를 읽음  : 저번 시간에 했던 피터슨 알고리즘에서 std::atomic_thread_fence(std::memory_order_seq_cst)를 제외한 경우 아래의 결과처럼.. 2024. 4. 18.
728x90
반응형