일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- 알고리즘
- BFS
- VR
- 백준
- 유니온 파인드
- Unreal Engine 5
- 시뮬레이션
- XR Interaction Toolkit
- 투 포인터
- 백트래킹
- 구현
- 다익스트라
- 정렬
- 우선순위 큐
- 그리디 알고리즘
- 다이나믹 프로그래밍
- 누적 합
- c++
- 트리
- 브루트포스
- 문자열
- 유니티
- 스택
- 자료구조
- DFS
- ue5
- 그래프
- 재귀
- Team Fortress 2
- 수학
- Today
- Total
목록유니티/C# 서버 연동 유니티 포트폴리오 (18)
1일1알
처음 LobbyScene에 입장하면 서버와 연결을 시도한다.연결된 상태에서 이름을 입력하고 Enter Game을 누르면 서버에 접속 요청 패킷을 보낸다.서버에서는 해당 패킷을 받으면 전달된 이름을 받아서 플레이어 정보를 만들어 저장해놓고, 입장하라는 패킷을 클라이언트에 보내준다. 클라이언트는 접속 허락 패킷을 받으면 씬 전환을 하고, 씬 전환이 완료되면 완료되었다는 패킷을 보낸다. 여기까지가 오늘 구현한 내용이고앞으로 할 작업은 서버에서 씬 전환 완료 패킷을 받으면 위에서 저장해놓은 플레이어 정보와 해당 씬에 있는 오브젝트들의 정보를 클라이언트에 보내주고, 클라이언트에서는 해당 정보를 받아서 오브젝트들을 생성하는 것 이다. 서버를 켜지 않았을 경우 서버를 켰을 경우
클라이언트가 서버에 접속하면 클라이언트에는 서버 세션이 생성되고, 서버에는 클라이언트 세션이 생성된다.접속과 동시에 서버에서 Protobuf로 만든 S_Test 패킷을 클라이언트 세션을 통해 클라이언트에 전송하고 클라이언트에서는 서버 세션을 통해 해당 패킷을 받아 S_Test로 전달된 메세지를 로그로 출력하여 클라와 서버가 통신이 되는지 테스트한 영상이다.
Critical Section (임계 영역)Critical Section이란 두개 이상의 쓰레드가 동시에 공유 자원을 접근할 수 있는 코드의 부분을 말한다. 멀티쓰레드 프로그래밍에서는이 Critical Section에 한번에 하나의 쓰레드만 접근이 가능하도록 설계를 해야 한다.그래서 Lock 등의 방법을 사용하여 Critical Section에는 한번에 하나의 쓰레드만 접근하도록 할 수 있고, 이렇게 한번에 하나의 쓰레드만 접근하도록 하여 공유 자원의 동시 사용을 막는 것을 Mutual Exclusion(상호 배제)라고 한다. DeadLock (데드락, 교착상태)경우에 따라서 Lock 안에서 또 Lock을 잡아야 하는 경우가 있을 수 있다.1번 쓰레드에서 1번 Lock을 잡고 그 안에서 2번 Lock을 ..
class Program{ static int number = 0; static void Thread_1() { for (int i = 0; i 위의 코드를 실행하면 어떤 결과가 나올까? 예상할 수 있는 결과는 0이다.하지만 상대는 멀티쓰레드... 항상 예상하지 못한 결과가 나온다. 역시나 예상했던 0이 나오지 않고 실행할때마다 다른 결과가 나온다.이것은 프로세서 2개가 동시에 공유 자원을 접근하기 때문에 예상하지 못한 결과가 나오는 것이고, 이것을 Race Condition(경합 조건)이라고 한다. 아니 그런데 number를 수정하는 코드는 단 한줄이고 한번에 일어나는 것인데 동시에 실행한다고 해도 상관없는 것 아닌가? 라는 의문이 들 수 있다.하지만 어셈블리어로 분석해보면..
캐시 CPU의 코어에는 ALU라고 하는 연산을 하는 장치와 데이터를 기억하는 장치인 캐시가 있다.RAM과 CPU는 물리적으로 거리가 있기 때문에 매번 RAM에서 데이터를 가져와서 사용하는 것은 느리다.그래서 필요한 데이터들을 임시로 저장해놓고 사용하고, 이 임시 데이터들을 저장하는 장소를 캐시하고 한다. 데이터를 변경할때도 마찬가지이다.바로 메모리에 변경된 데이터를 올리는 것이 아니라, 일단 자신의 캐시에 저장해놓고 나중에 실제 메모리에 한번에 올린다. 캐시는 RAM에 비해서는 공간이 매~~~우 작은데 그럼 RAM에서 어떤 데이터를 임시로 가지고 있어야 할까?캐시에는 Temporal Locality(시간적 지역성), Spacial Locality(공간적 지역성)이라는 두가지 철학이 있다.Temporal ..
멀티쓰레드란?쓰레드란 프로세스(프로그램)에서 실행되는 흐름의 단위이다.보통 알고리즘 문제를 풀거나 유니티 로직을 짤때 별도의 쓰레드를 생성하지 않았고, 그렇다면 기본적으로 하나의 쓰레드가 존재한다.이렇게 하나의 쓰레드가 하나의 프로세스에 있는 것을 싱글쓰레드 라고 하고, 여러개의 쓰레드가 하나의 프로세스에 있는 것을 멀티쓰레드라고 한다. 스레드는 그냥 실행되는것이 아니라 실행하는데 필요한 자원이 필요하다.즉, 프로세서(CPU코어)가 스레드를 실행해줘야 하고, 프로세서는 한번에 하나의 쓰레드만 실행시킬 수 있다.프로세스가 실행되는 과정은 프로세서가 엄청나게 빠른 시간 간격으로 쓰레드들에 할당되어 쓰레드를 실행해주는 것이다. 코어가 할당되는 속도가 매우 빠르다보니 동시에 실행되는것처럼 보이는 것이다. 프로세..