🎮 컴퓨터 과학 216

[VCS] 파일 불러오기

진자 기본인데 이걸 할때마다 헷갈려서 적음,, 새로 가져온 프로젝트를 원래 프로젝트에 덮어씌우려고 함 오른쪽이 새파일, 왼쪽이 내가 켜둔 프로젝트        저 framework는 넣은적이 없는데 왜 다시 생긴거쥐   당근 이방법이 정석은 아니겠지만 기존파일 덮어쓰는 방식으로는 이방법밖에 모름아시는분 저에게 제발 정보좀 부탁드립니다.............   dksl tlqkf필터 생성하려고 보는데 안됨  이래서 걍 첨부터 새로 만들었다~! ^^

[게임 프로그래머 입문 올인원] 멀티쓰레드 프로그래밍 : 스마트 포인터

A. 스마트 포인터1. 멀티스레드와 스마트 포인터a. 객체 포함 레퍼런스 카운트 블록💥 일반 포인터를 사용하면 안되는 이유주소값을 진짜 사용해도 되는지 안되는지에 대한 정보가 없어서 포인터를 그냥 들고있으면 생명 주기가 꼬여서 날라가고... 난리남 그래서 레퍼런스 카운트를 사용해 주소값을 관리하게 됨 객체에 포함, 레퍼런스 카운트를 관리하는 블록 2가지로 만들 수 있음 1) 객체에 포함하는 refCount    위 순간 주소값을 기억하는 애가 하나 증가함위와같이 카운팅을 쳐서 관리하는 방법이 있음 (수동 레퍼런스 카운트) 위를 멀티스레드 환경에서 작업할 시 알아야 할것 => 증감연산자 -> 아토믹으로 해결  여기서 아토믹만 붙인다고 끝? -> 스마트 포인터를 사용해야 함  위는 멀티스레드 환경에서만 위..

운영체제 2024.12.05

[게임 프로그래머 입문 올인원] 멀티쓰레드 프로그래밍 : 이벤트와 조건 변수

A. 이벤트와 조건 변수1. 이벤트 (승무원부탁)a. 사용하게 되는 이유매니저에 접근할때 락을걸로 작업하면 됨 스레드를 이리저리 배치해서 운영하면 생성, 소모에 따라서 배치를 하게 됨  먼저 mutex 생성일감은 queue에 넣어주기  sleep_for는 얼마만큼 쉬어야 하는지를 나타냄  반대로 producer와 반대로 일함정보가 들어있으면, 꺼내서 출력하기  나중엔 위 방식에서 네트워크 통신을 잡아서 넣어주게 됨 위 방식에서 아쉬운건 락을 걸고 어떤 행위를 하고 있음 데이터가 없어도 스핀락처럼 계속 우회하고 있음 👉 해결방법은 스핀락, 위에서 사용한 sleep_for, 승무원한테 부탁하기 승무원한테 부탁하는건 이벤트를 활용하는 것임 b. 이벤트 :: 커널 오브젝트 🌟 커널 오브젝트 ::  운영체제가..

운영체제 2024.12.04

[게임 프로그래머 입문 올인원] 멀티쓰레드 프로그래밍 : 락 기초, 스핀락, 데드락

A. 락 기초 1. 락 기초a. 시작하기전에...1) 아토믹 복습 모든걸 아토믹으로 바꾸면 해결이 될까 원자적으로 묶어주는건 정수 하나! 정도 정말 많이 할 순 없음 2) stl 컨테이너의 앙탈 위를 실행시키면 크래시가 난다이유는 벡터같은 stl 컨테이너들은 멀티스레드로 동시다발적으로 실행하면 무조건 크래시 동적으로 할당한 영역은 heap 에 배치되는데멀티스레드에서는 동시다발적으로 사용하기 때문에 누가 값을 날려버려 크래시가 난다  이사비용을 줄이기위해서  reserve함수를 사용해 미리 확대해놓고 사용한다면 이상한 값이 나옴하나의 주소를 여러명이 사용하고 있기 때문에 (덮어써짐) 그럼 따라서 위와같은 벡터를 사용한다면 락을 잘 사용해야함 b. 락이란?일련의 코드드를 묶어줘서 다른 코드가 접근하지 못하게..

운영체제 2024.12.03

[게임 프로그래머 입문 올인원] 멀티쓰레드 프로그래밍 : 공유자원

A. 공유자원1. 공유자원실습a. 공유자원 생성멀티쓰레드를 공부할 떄 항상 배우는 예제가 있음  위 두개의 함수를 스레드의 자원으로 활용한 스레드를 메인에 생성해주고 둘다 조인으로 종료, 결과값은? => 결과값이 작으면 0, 100만번 하면 ??? 여기서 전역변수로 만들어진  sum이라는 변수가 데이터 영역에 들어감 (공유됨)  ++을 의사코드로 작성하면 위와 같이되는데 멀티스레드로 작동되고 있다고 생각하면 이해됨 (흑마법)Sum을 공유하고 있기 때문에 코드가 동시 다발적으로 끼어드니까 이런 문제가 발생됨 또 지역변수인(stack 에 저장) i를 다른코드로 밀어준다면 어떻게 될까? => 밀어짐 b. 아토믹 아토믹으로 실행하면 정상적으로 작동됨아토믹이 되면, 좀 더 복잡해지지만 다른 어셈블리어로 실행해줌 ..

운영체제 2024.12.03

[게임 프로그래머 입문 올인원] 멀티쓰레드 프로그래밍 : 캐시와 CPU 파이프라인

A. 캐시와 CPU 파이프라인1. 캐시a. 캐시 기초컴퓨터 구조 원리 : 캐시  레드 : cpu 노란색 : 메모리전기가 아무리 빨라도 물리적으로 좀 멀어보임 (데이터 낭비) 따라서 캐시를 사용함 b. cpu의 캐시관리 레지스터는 cpu의 손발아래 캐시들은 단기기억장치 (서빙할 때 메모장 같은 것)  c. 캐시 철학 물리적으로 모든 데이터를 가져오지 않고잠시 기억해두는것! ==> 이것이 캐시  d. 캐시 실습접근하는 비용이 얼마나 걸렸는지 테스트하기  버퍼를 하나 생성하고 GetTickCount64로 시간을 재고반복문을 사용해 버퍼에 넣어주기 그럼 버퍼에는 캐시가 [a] [b] [c] [d] [e] [f] [g] [h] [i] [j] [k] 이런식으로 저장되게 되는데  위와 같은 코드지만 추가로 j,i를 ..

운영체제 2024.12.03

[게임 프로그래머 입문 올인원] 멀티쓰레드 프로그래밍 : 쓰레드

A. 쓰레드1. 쓰레드 실습a. 기초 쓰레드 생성쓰레드를 만들어서 사용하는 연습하기않이 겁나 열심히 만들어서 쓰고있었는데 갑자기 다 날라갔다 새로운 쓰레드를 만들어보자   메인에서 std::thread t(HelloThread) 실행위 코드를 실행하면 스레드를 하나 더 만들 수 있음Hellothread()인자가 있어야 실행됨 💥 위 코드를 실행하면 오류가 발생된다이유는 메인 스레드가 원래 존재하는데,새로운 쓰레드가 생성되고 종료되기도 전에 메인이 종료되어서 그럼따라서 아래와 같이 작성  t.join(); 을 사용하면 종료된 쓰레드를 모아주는 역할을 한다 (끝난지 확인? 정도)joinable()을 사용해서 이중체크를 해도 되는데 안해도됨    ✨ 근데 여기서 알아둬야할게 있음스레드를 이렇게 임의로 생성해..

운영체제 2024.12.02

[게임 프로그래머 입문 올인원] 멀티쓰레드 프로그래밍 : 멀티쓰레드 입문 (116강)

A. 멀티쓰레드 입문1. 쓰레드a. 쓰레드란?🌟 스레드 : 직원같은 개념 정확하게 알려면 운영체제를 깊게 공부해야함  쓰레드를 설명하는 그림인데, 영혼을 로봇에 주입해서 운영한다고 하면 됨영혼을 아주 빠르게 로봇들한테 영혼을 주입시킨다 b. 프로세스와 스레드의 차이프로세스는 프로그램 그 자체를 말함 알아서 동작하는게 아니고 하나의 껍질이라고 보면 됨 👉 쓰레드가 프로그램을 실행시키는 주체라고 볼 수있음  c. cpu 운영 옛날에는 코어가 하나밖에 없어서 영혼이 한개밖에 없었음그 영혼을 관리하는게 운영체제 Cpu에서는 이렇게 하나씩 쓰레드에 먹이를 먹여가면서 실행하게 된다 d. cpu의 코어가 여러개면?멀티코어 프로세서라고 함 / 다수의 스레드를 실행시킴  Cpu 의 성능이 좋아지는데  물리적인 한계가..

운영체제 2024.11.18

[게임 프로그래머 입문 올인원] 멀티쓰레드 프로그래밍 : 서버 (115강)

A. 서버 OT1. 서버a. 서버란 무엇일까?🌟 다른컴퓨터에서 연결이 가능하도록 상시 대기(실행) 중인 프로그램  마치 식당과 같다 실제로 (서버 C / 컴퓨터 / 프로그램) 3가지를 말할 수 있는데 게임 프로그래머는 프로그램을 서버라고 말함 2. 게임 서버의 종류a. 웹 서버 질의/응답 형태 (테이크아웃 식당) 드물게 정보를 요청/갱신하는 경우실시간 상호작용이 필요없는 경우손님이 요청하는 경우에만 일을 실행한다= 상태가 없기때문에  stateless서버라고도 하기도 함 처음부터 게임으로 만들어진게 아님 (홈페이지용 서버임)프레임워크 하나를 골라서 사용 (자바 - 스프링, 자바스크립트 등) b. 게임 서버 실시간 상호작용 (일반 식당) 언제라도 직원이 손님한테 접근이 가능해야 함Stateful서버 처음..

운영체제 2024.11.18

[게임 프로그래머 입문 올인원] 2D 포폴 준비 : 젤다 실습(114강)

A. 2D 포폴 준비 7. 젤다 실습a. 타일맵 데이터 가져오기여기까지 만든 파일을 기반으로 조금의 수정을 둬 젤다 실습을 해볼것임!     b. 충돌 판정 함수타일맵으로 충돌판정을 하기 위해 함수를 새로 만들어줬다    가려고 하는 위치에 갈 수 있는지를 파악해 불리언값을 뱉는 CanGo함수와벡터값으로 위치를 이동시키는 ConvertPos를 만들어준다  c. Player 수정하기 : 움직임여태까지 하드코딩했던 움직임을 enum으로 깔끔하게 잡아준다              한칸씩 이동하는 걸 볼 수 있음 (타일 켜고 끄는걸 깜빡하고 안꺼줘서 중간에 X로 눌렸음..)   d. DevScene 코드 수정위 코드는 다음 DevScene으로 넘어오게된다   디버그 모드를 끄고 보게되면 이렇게 나온다!  e. 서..