목록Programming (24)
지우너
앞에서 그랬던 것처럼 내용을 정리한 PPT로 내용을 대체한다... 1. 소켓 프로그래밍 1.1. 개념 클라이언트 클라이언트가 서버에 접속을 하면 서버에서 이런저런 처리를 한 다음 세션을 하나 만들어주는데, 그 후 모든 통신들은 세션을 통해서 이루어진다. 서버 일반적으로 연락을 주고받는 용도가 아니라 그냥 문지기 역할을 하는 Listener 소켓을 하나 준비한다. bind라는 함수를 통해 식당주소(서버주소)와 번호(port)가 무엇인지 Listener 소켓에 연동시킴 listen이라는 함수를 통해 클라에게서 접속요청을 받을 수 있도록 준비 접속 요청이 오면 accept 함수를 이용해서 안내해줌 accept가 끝나면 클라 세션 하나가 만들어지는데, 그 세션에도 소켓이 있다. 클라이언트와 대화할 때는 클라이언..
드디어 섹션1 멀티쓰레드 프로그래밍의 마지막 강의 정리를 올린다... TLS를 완벽하게 이해하고 싶어서 열심히 마이크로소프트 문서를 읽어봤으나(정확히 말하자면 문서에 나온 TLS 작동방식 다이어그램을 이해하고 싶었다...), OS 지식의 부족이 문제인지 잘 이해가 가지 않았다. 지금 보고 있는 인프런 강의가 끝나면 대학교 때 배웠던 OS 필기를 다시 보면서 복습해야 할 것 같다... 1. TLS게임을 예로 든다면 게임로직, DB, 클라이언트 세션 관리, 로그 찍기 등 다양한 분야들이 나뉜다. 그런데 얘네들이 코드 로직적으로 생각해보면 어느 정도 연관되어 있다. 예를 들어 게임 로직을 실행해서 아이템을 강화하는 작업을 한다면 이걸 DB에 저장해야 하니까 DB에도 갔다 와야 하고, 성공적으로 뭔가 이뤄졌으면..
나중에 서버를 쌓아올리게 되면 ①핵심적인 코어 부분만 멀티스레드로 만들 것인지 ②게임과 관련된 콘텐츠도 멀티스레드로 만들 것인지 선택해야 한다. ②의 경우 모든 코드에서 다 멀티쓰레드로 돌아갈 수 있다고 하면 난이도가 확연하게 올라간다. 심리스(=경계가 없는) MMORPG(ex. 젤다:야숨, 몬스터헌터:월드 등)를 만들 때 조금 유리하다는 장점이 있다. 그게 아니라 바람의 나라나 뮤 같은 게임을 보면 존 단위로 나뉘어져 있다. 공간이 갈 수 있는 지역이 구분이 되어 있고 그 공간 안에 서 있는 모든 컨텐츠 코드는 싱글쓰레드로 그냥 실행시키면 훨씬 더 생각하기도 쉽고, 버그 확률도 줄일 수 있다. 이럴 때는 굳이 멀티쓰레드로 갈 필요 없이 전체적인 코어만 멀티쓰레드로 돌리고 핵심적인 컨텐츠 코드는 싱글쓰레..
임계영역(Critical Section) 동시다발적으로 Thread들이 접근을 하면 문제가 되는 코드 영역을 의미한다. 해당 영역에서 race condition이 발생한다. race condition 멀티쓰레드 프로그래밍(1)에서 둘 이상의 입력 또는 조작의 타이밍이나 순서 등이 결과값에 영향을 줄 수 있는 상태를 말한다. 입력 변화의 타이밍이나 순서가 예상과 다르게 작동하면 정상적인 결과가 나오지 않게 될 위험이 있는데 이를 경쟁 위험이라고 한다.(Wikipedia) 이를 해결하기 위한 방법 중 하나가 interlocked였다. Interlocked.Increment(ref num); interlocked계열은 성능도 굉장히 빠른 편이고, 우수하긴 한데 앞서 봤던 것처럼 정수만 사용할 수 있다는 치명적..
1. Thread 생성 Using System.Threading 을 추가하여 쓰레드를 사용할 수 있도록 만들기. using System; using System.Threading; namespace ServerCore { class Program { static void MainThread(object state) { for (int i = 0; i < 5; i++) { Console.WriteLine("Hello Thread!"); } } static void Main(string[] args) { ThreadPool.QueueUserWorkItem(MainThread); for (int i = 0; i < 1000; i++) { Thread t = new Thread(MainThread); t.Nam..
본 글은 한정현 교수님의 "컴퓨터 그래픽스" 강의를 정리한 글입니다(강의에 사용된 ppt 링크). 4장에서는 세 가지 중요한 변환을 살펴본다. ① Scaling (축소/확대) ② Rotation (회전) ③ Translation (이동) Scaling (축소/확대) 2 차원 축소/확대 경우 축소/확대 인자(x 방향, y 방향) 사용 어떤 벡터 x좌표가 주어졌을때 그 앞에 Sx 를 곱하고, y 좌표가 주어졌을 때 Sy 를 곱하면 이것이 축소/확대된 벡터를 나타냄. 그래픽스에서는 이러한 변환을 모두 행렬의 곱셈으로 표현한다. 따라서 축소/확대 되어야 할 벡터를 그림 16의 오른쪽과 같이 column vector로 표현하고 축소 확대될 벡터를 주 대각선에 놓아서 2x2 행렬을 만들어 곱한다. 예를 들어 어떤 ..