전체 글75 게임 네트워킹의 이해5 - MMORPG 서버 구조 MMORPG 게임에서 서버를 멀티스레드로 만드는 방법싱글 프로세스 -> 멀티 스레드 구조로 구현멀티 프로세스 -> 싱글 스레드 구조, 멀티 스레드 구조로 구현요즘은 거의 대부분 멀티 코어이므로 코어의 성능을 다 쓰겠다 하면 멀티스레드 구조는 필수적이다.멀티 스레드 구조는 처음 구조를 짤 때 설계가 매우 중요하다.멀티스레드 만드는 방법1. 무식하게 한다.모든 working 스레드가 아무런 조건도 없이 그냥 모두 경쟁을 붙인다.스레드들끼리 공유자원에 막 접근해서 막 lock을 건다.lock을 많이 걸다보니 성능이 떨어지고 wait하는 시간이 길어지고 deadlock이 생길 확률이 올라간다.lock이 많이 생기다 보니 race condition이 발생한다.이러다 보니 타이밍 이슈가 생긴다. ( a가 먼저 들어.. 2024. 9. 10. 게임 네트워킹의 이해4 - 소켓 프로그래밍 소켓이란?랜선 소켓(콘센트)이 있고 그 소켓에 랜선을 연결해서 정보나 데이터를 주고받는 것소켓 프로그래밍이란?데이터 read / write 를 하는 IO Process다.read / write는 크게 두 가지 방식으로 동기와 비동기 방식이 있다.동기 방식데이터를 read()하면 데이터가 올 떄까지 다른 동작을 하지 않고 읽기 위해 대기한다.게임 서버에서는 여러 커넥션을 동시에 핸들링하기 때문에 하나의 데이터가 올 때까지 서버가 멈춰있으면 안된다.-> 그래서 read만 보내고 다른 작업을 처리하는 방식인 비동기 방식이 필요하다.비동기 방식read()를 요청했으면 데이터가 오든 안오든 요청만 걸어놓고 다른 일하러 간다.다른 일하러 갔다와서 read()의 응답이 왔으면 그걸 처리한다.비동기 방식은 크게 두 가.. 2024. 9. 8. 게임 네트워킹의 이해3 - 받은 데이터 활용 방식 네트워크를 통해 전송된 데이터의 활용 방식Deterministic 방식같은 인풋을 가지고 있으면 두 개의 다른 컴퓨터가 똑같은 게임 결과를 가지고 있다는 가정을 하는 것이다.플레이어 1이 입력한 인풋과 플레이어2가 입력한 인풋이 두 pc에 동일하게 적용되면 두 pc의 결과가 같다. ( sync가 맞다 )그런데 두 pc의 latency가 있는데 이 latency에 의해서 두 pc의 입력이 다르게 처리된다 하면 결과 상태가 달라지게 된다.이렇게 되면 sync가 안 맞게 되는데 이걸 막는 방법이 deterministic 방식의 가장 중요한 요소이다.이미 결정되어 있다!같은 입력이 같은 시간에 두 개의 pc에 들어가게 만들면 결과는 같다. (ex. 오락실의 두 대의 마주보고 있는 철권 게임기 )상태를 주고받는 .. 2024. 9. 8. 게임 네트워킹의 이해2 - TCP/UDP 프로토콜 Protocol이란?약속, 규약즉, 네트워크 프로토콜은 네트워크 통신에서의 서로 간의 약속 or 규약컴퓨터간의 통신에서도 서로 약속을 한다.( ex. 예전의 모스 부호처럼 송신자/수신자가 전부 규칙을 알고 있어야 통신 가능 )네트워크 7 layer소포를 포장지를 여러개 겹겹이 쌓아서 보내는 것과 같음맨 위에는 한국, 그 다음 포장지에는 서울, 그 다음 포장지에는 강남, 그 다음 포장지에는 신사동, ...이 포장지 하나하나가 layer이다.게임에서 많이 사용하는 TCP / UDPTCP 프로토콜이란?하드웨어, 즉 기계 내부에서 아래 3가지를 보장해준다 ( 3way handshake )연결 유무 확인 패킷 순서 보장패킷 송신 보장UDP 프로토콜이란?연결 유무 확인? X순서 보장? X송신 보장? XTCP보다.. 2024. 9. 7. 게임 네트워킹의 이해 - 1 네트워킹이란? 게임 서버 네트워크를 구축할 때 고려해야 할 사항 3가지지연시간연결이 불안정순서 비보장 2024. 9. 7. 프로그래머스 lv2 - 괄호 회전하기 (자바) 문제프로그래머스 lv2 - 괄호 회전하기풀이스택 사용한 칸씩 왼쪽으로 이동시키기탐색 시작 위치를 한 칸씩 오른쪽으로 이동해당 위치 인덱스를 문자열 전체 길이로 나머지 연산 수행해서 범위를 넘어가는 위치 인덱스 처리괄호 짝이 맞다면 스택에서 pop()괄호 짝이 맞지 않다면 스택에 push()전체 문자를 탐색 후 스택이 비어있다면 answer 증가코드import java.util.*;class Solution { public int solution(String s) { int answer = 0; char[] arr = s.toCharArray(); int len = arr.length; for (int k = 0; k st = new Stack();.. 2024. 7. 1. 이전 1 2 3 4 ··· 13 다음