안녕하세요 ㅎㅎ ArraySegment 의 신기한 점을 발견하고 질문드립니다. Q.1 Session.cs에서 RecvBuffer 객체를 생산하고 다음과 같이 _recvArgs.SetBuffer의 인자로 WriteSegment의 반환값을 넣어주고 있습니다. WriteSegment의 반환값이 _buffer의 값을 이용해 새로운 인스턴스를 생성했다고 생각했습니다. 왜냐면 new를 통해 만들었으까요.. 일종의 값의 복사만 일어났다고 생각을 했거든요.. 근데 로직상 _recvBuffer.WriteSegment의 반환값이 RecvBuffer 객체의 맴버변수인 _buffer에도 영향을 주기에 가능하다고 생각하니 단순 값의 복사만 일어난건 아니라고 생각했습니다. 실제 테스트 해보니 _buffer를 통해 만든 newBuffer의 값을 변경하니 _buffer의 값 또한 변경됐습니다.. 이게 어찌 가능한 일인가요? ArraySegment 생성자의 첫번째 인자가 신비로운 문제의 해답인가요?
안녕하세요 ㅎㅎ 세션과 소켓에 이 정확히 무엇인지 이해가 잘 안돼서 질문드립니다. 제가 이해한걸 정리하면 소캣은 서버와 클라가 통신할 수 있는 수단 혹은 통로라고 생각합니다. 그렇다면 세션은 무엇인가요? 소캣을 포함하며 구조적으로 설계가 잘 된 사용자 정의 인터페이스라고 봐도 되는건가요?
안녕하세요 ㅎㅎ 궁금증이 생겨 질문드립니다. 강의 21분에 "Disconnect 함수를 동시 다발적으로 실행하거나 같은 Thread가 두 번 한다면" 이라고 말씀하셨습니다. Q.1 Disconnect 함수를 동시다발적으로 실행할 수 있나요? 다르게 말하면 DisConnect함수가 실행하는 내용이 임계영역인가요? 여러번 고민해봤는데 Disconnect를 호출하는 OnAcceptHandler는 인자로 스레드마다 독립적으로 하나씩 가지고 있는 clientSocket 을 받고 clientSocket으로 Session.Start( clientSocket ); 을 통해 Session 클래스의 객체를 초기화 해주기에 임계 영역이 아니라고 생각합니다. 후자로 말씀하신 하나의 Thread에서 실수로 코드에 두 번 기입해서 Disconnect를 하지 않는 이상 별다른 문제가 없다고 생각합니다. Q.2 매번 코드를 작성할 때마다 임계영역인지 아닌지 고민하면서 코딩하다 보면 머리가 터질 것 같습니다. 선생님께서는 눈에 보이는 임계영역에만 상호배제를 해주고 후에 배포 전에 테스트 단계에서 문제가 발생하면 그때 수정하는것도 현명한 방법이라고 생각하시나요? 조언 부탁드립니다!!
안녕하세요 의아한 점이 생겨 질문드립니다. 메인에서 MaxThread의 수를 3개로 지정한 상태에서 Invoke를 호출하고 ManagedThreadId를 확인하면 Invoke시에 메인 스레드인 1번을 사용하는 이유가 무엇인가요?.. MaxThread를 (1,1)로 설정해도 무조건 한 번은 메인 스레드를 사용하고 그 다음부턴 풀에서 스레드를 꺼내쓰더라구요.. 왜 한 번은 메인스레드가 사용되는건가요?
안녕하세요 ㅎㅎ 강의를 듣다가 여러 궁금증이 생겨 질문드립니다. Q1. 메모리 할당에 관한 질문입니다. 질문드리기 앞서 무성의한 변수 작성에 사과드립니다. static 변수(a)는 Data영역에 멤버변수(b)는 Heap영역에 멤버함수(Func)는 Code영역에 멤버함수 내에 존재하는 지역변수(c)와 t2는 Stack영역에 할당된다고 알고있습니다. 실제 Main에서 Test라는 클래스를 인스턴스화후에 메모리 구조에 대해서 몇 가지 질문드리고 싶습니다. Test t2 = new Test(); 이 코드를 실행하게 되면 Stack에 t2라는 변수가 생기고 Heap에 할당된 메모리를 가리키고 있을거라 생각합니다. 궁금한건 Func함수입니다. 질문속의 작은 질문들을 정리해서 말씀드리면 Q1.1 t2라는 변수를 통해서 저희는 멤버변수인 b에도 접근하고 Func라는 함수도 호출합니다. 다만 t2는 heap의 주소를 가리키는 포인터인데 heap영역에 있지 않는 Func라는 함수를 어떻게 가리키는건가요? 한 가지 추정을 해보면 heap어딘가에 Func의 Stack 시작점 주소를 저장할 공간이 있고 Stack에 함수가 할당되면 그곳으로 매핑을 시켜주는 건가요? Q1.2 Code영역이 궁금해서 검색하다가 지역변수는 함수 호출시에 Code영역에 저장되는 함수 정의를 활용하여 초기화 된다. 라는 글을 발견했습니다. Code영역에 함수가 정의된다는것과 Stack에 함수가 할당되는게 구체적으로 어떤 연관성이 있는지 이해가 잘 안됩니다.. 정의를 활용한다는게 어떤 의미안가요? Q1.3 클래스 내부에서 Static Test t1 = new Test(); 코드를 실행해봤습니다. static변수는 클래스가 메모리에 올라갈때 할당 된다고 배웠는데 t1이라는 변수가 Data영역에 할당되자마자 Heap에도 데이터가 할당되는건가요? Q1.4 이러한 메모리 할당에 대한 의문이 생기면 실제로 실험해보고 검증하고 싶은데 Stack Heap Data Code 영역을 실제로 확인할 수 있는 방법이 무엇인지 모르겠습니다 ㅠㅠ.. 디버깅처럼 이러한 것들을 확인할 수 있는 방법이 있을까요..?? Q2. ReaderWriterLock에 관한 질문입니다. WriteUnLock 부분에서 Exchange를 사용하지 않고 _flag = EMPTY_Flag;를 해주면 문제가 발생할까요? 제 스스로 고민해본 결과 WriteUnLock은 어쨋든 Lock을 잡은 상태에서만 호출을 한다고 가정했으니 임계영역이 아니라고 생각했습니다. 재귀적으로 호출을 해도 별 문제가 없다고 생각한건 싱글스레드가 독보적으로 호출할 수 있는 영역이니까요. ReadUnLock의 경우는 여러 스레드가 동시에 값을 변경하니 Interlocked.Decrement(ref _flag);를 호출하는게 맞다고 생각하는데 WriteUnLock을 _flag = EMPTY_Flag;이와 같이 작성해도 별 문제가 없을까요?
안녕하세요 ㅎㅎ강의 잘 듣고 있습니다. Q1. 유저레벨 스레드? 커널레벨 스레드? 선싱님 강의를 수강하니 운영체제 수업에서 배운 내용들이 하나 둘씩 기억나서 매우 반갑네요. 제가 기억하는 내용을 적어보면, 일반적으로 IO나 인터럽트에 의해 발생하는 프로세스 문맥 교환과 매우 유사하게 쓰레드도 레지스터나 캐시의 정보들을 주 메모리로 옮기는 과정을 운영체제가 도맡아 담당하게 됩니다. 때문에 쓰레드간의 문맥 교환시에 Kernel모드로 진입한다고 말씀하신거겠죠. 궁금한점은 쓰레드의 구현 방식에 따라? (아마 유저 레벨 쓰레드와 커널 레벨 쓰레드로 구별하는 것 같습니다.) 문맥 교환의 비용이 차이가 난다고 어디선가 배운 기억이 납니다. 본 강의에서 사용한 쓰레드는 생성시 라이브러리 함수를 사용했고.. 아마 내부적으로 시스템 콜을 호출했고 결과적으로 유저가 아닌 Kernel이 스케쥴링하니 커널레벨 스레드인 것 같은데요.. 그렇다면 유저레벨 스레드라는건 어떤걸까요? 유저(개발자)가 문맥교환을 담당하고 스케쥴링도 담당하는, 모든걸 개발자가 도 맡아하는 스레드인가요? 실제 유저 레벨 스레드가 많이 사용되는 경우는 어떤 경우인가요? Q2. AutoResetEvent는 Kernel단으로 내려가서 문맥교환으로 인해 spinlock보다 성능이 저하될 수 있다고 말씀하셨습니다. 궁금한건 sleep 혹은 yield또한 cpu의 점유권을 포기한 상태에서 다른 스레드를 실행할 수 있기때문에 kernel로 진입후에 문맥교환이 발생하고 이에따른 성능 저하가 일어날 수 있을까요?
ERROR: Could not install packages due to an OSError: [WinError 5] 액세스가 거부되었습니다: 'C:\\Users\\leehb\\AppData\\Local\\Temp\\pip-uninstall-87624jrp\\pip.exe' Consider using the `--user` option or check the permissions. 이렇게 나왔다가 pip install datetime WARNING: Value for scheme.headers does not match. Please report this to <https://github.com/pypa/pip/issues/9617> distutils: c:\python38-64\Include\UNKNOWN sysconfig: c:\python38-64\Include WARNING: Additional context: user = False 이렇게 뜹니다. 이거 어떻게 해결해야할까요?
처음에 메인에서 t.Start();가 Console.WriteLine("Hello World!")보다 먼저 와 있어서 제 생각에는 먼저 Hello Thread!가 먼저 찍힐 줄 알았는데, 실행해보면 Hello World!가 먼저 찍히고 Hello Thread!가 찍히더군요. 그렇다는건 이 Thread라는 일꾼은 메인이 끝난 뒤에야 실행된다는 건가요??
ValueError: unknown format code 'd' for object of type 'str' 이라고 뜨네요 krx/listing.py 에서 df_listing['Symbol'] = df_listing['Symbol'].apply(lambda x: '{:06d}'.format(x)) 이부분에서 x값이 string으로 들어가서 문제가 생기는듯 합니다. 버전은 선생님 버전이랑 같은데 뭐가 문제인지 몰겠네요
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
안녕하세요. 좋은 강의 잘 보고 있습니다. 이동을 할때 패킷을 한칸 이동하는 애니메이션이 끝날때 보내는 것으로 설명하신거 같은데요. 이동 시작할때 보내는 것과 차이가 있을까요? 예를 들면, 나와 상대의 위치 사이에 한칸의 빈 공간이 있고, 거의 동시에 (상대가 미세하게 먼저 이동) 빈 공간으로 이동한 경우라 하면... 이동 애니메이션이 끝났을 때 패킷을 보내게 되면 나의 캐릭터가 빈공간에 거의 도착을 했을 때 상대 이동 패킷을 서버에서 받게 되므로 내 위치가 원래 위치로 복귀하게 되고 상대가 이동을 시작하게 되는 것 같네요. 만약 이동 시작할 때 패킷을 보내는 경우라면 나의 캐릭터가 이동중에 패킷을 받게 되므로 상대 캐릭터도 이동하여 빈공간에서 겹쳐보이다가 서버 판정으로 내 캐릭터가 원래 위치로 복귀하게 될 거 같네요. 이렇게 생각하는게 맞는건가요?
- 학습 관련 질문을 남겨주세요. 상세히 작성하면 더 좋아요! - 먼저 유사한 질문이 있었는지 검색해보세요. - 서로 예의를 지키며 존중하는 문화를 만들어가요. - 잠깐! 인프런 서비스 운영 관련 문의는 1:1 문의하기를 이용해주세요. 안녕하세요. 선생님 3.3 네이버금융 개별종목 수집 강의 중 파일 자동 저장 코드 에서 저장할 디록토리를 지정하는 방법 있을까요? 수동으로 저장할때 보통 df.to_csv("../data/test.csv") 이런식으로 저장디렉토리에 저장 하는데 변수로된 파일명을 ""안에 입력하니 에러가 나서 다른 방법이 있는지요? 항상 강의 잘 듣고 있습니다. 감사합니다.
[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part7: MMO 컨텐츠 구현 (Unity + C# 서버 연동 기초)
안녕하세요 현재 2D 관련 피격 판정 강의를 보다가 3D 지형같은 경우 어떻게 처리해야 할지에 대해 궁금해서 글을 남깁니다. 제가 현재 진행중인 프로젝트는 3D 기반의 5x5km ~ 8x8km의 오픈월드 인데요. 3D 지형이라서 언덕과 산과 같은 것들로 인해 굴곡이 져있고 게다가 오픈월드라서 많은 오브젝트들이 배치되어 있는데 이 부분에 대해 어떻게 해야할지 고민스럽습니다. 피격 판정 및 장애물을 지날수 있느냐 없느냐도 결국엔 맵 정보가 서버에 있어야 가능할 텐데 이 부분을 어느정도는 클라이언트 딴에서 처리하는 방식으로 해도 괜찮나요?.. 학부 수준에서 소수의 인원이 모여서 하는 프로젝트라 모든 것을 엄격하게 서버에서 처리할 필요는 없기는 한데 그래도 서버에서 처리를 하는 것이 당연히 맞다고는 생각하지만 방법이 떠오르지가 않습니다 ㅠ 모든 것을 1,0으로 처리하기에는 3D라 z축 기준에서는 또 이게 적용이 되는지 잘 모르겠구 맵도 넓고 오브젝트도 너무 많아서 그렇게 했다가는 엄청난 용량이 발생할 거 같다는 생각도 듭니다. 3D 지형에서는 어떤식으로 맵에 관한 정보를 뽑아오는지 그리고 넓은 오픈월드 안에 있는 모든 오브젝트들 또한 정보를 어떤식으로 뽑아오고 서버에서 이것을 어떻게 관리해야하는지 조언 해주시면 정말 감사하겠습니다!!
안녕하세요 강의에서 사용하신 Knight가 없어서 다른 애니메이션을 가져왔습니다. attack 애니메이션을 unityChan에 적용하면 왜인지 모르겠지만 땅에 박혀있더라구요 auto로만 사용했을 때는 잘 되는 것 같은데 auto와 Unity model이 정확히 뭐가 다른건가요?..
customer = "Robert" index = 1 while True: print("{0}, Your order is ready.".format(customer)) index += 1 if index => 2 print("{0}, Your order is ready. We called you {1} times".format(customer, index)) index += 1 나도코딩님 무료파이썬 강의 while편에서의 질문입니다. 강의에서는 한글이니까 아래의 코드는 안넣어도 상관없지만 영어로 하면 처음 불렀는데 times라고 하면 문법이 안맞다는걸 깨닫고 처음 불렀을때와 그다음 불렀을때의 문장을 구분해서 출력하고 싶어서 넣은 코드입니다. if index => 2 이부분에서 invalid syntax (<unknown>, line 8)이라고 에러메시가 출력이 됩니다. 원인은 도저히 모르겠습니다. 알려주시면 정말 감사하겠습니다.
안녕하세요 Json파일을 추가하고 긁어온 데이터를 Log를 찍는 과정에서 프로젝트가 다음과 같이 에러를 뱉어냅니다. Unity에서 StatData.json을 더블클릭해서 열면 한번 외부에서 수정했다는 문구가 뜨면서 솔루션 탐색기에서 아이콘이 변경되고 이후부터는 UNITY에 연결도 안되고 디버깅도 안됩니다..
Assets\Script\Managers\Managers.cs(16,19): error CS0246: The type or namespace name 'UIManager' could not be found (are you missing a using directive or an assembly reference?) 이런 오류가 떴는데요 Managers 스크립트에서 UIManager _ui = new UIManager(); public static UIManager UI { get { return Instance._ui; } } 이 두 줄이 문제라고 떴습니다. 문제를 찾고 싶어서 강사님이 올려놓은 코드+정리와 비교해봤는데 도저히 못찾겠어서 질문적어봅니다.. 아래는 오류난 유니티 파일 링크입니다. https://drive.google.com/file/d/16Ayu9tOwC4CKTQcAKrsrTuPx1Sa3Rh_5/view?usp=sharing
GameObject.FindObjectOfType<BaseScene>(); 해당 함수가 Object를 찾는 기준이 궁금해서 유니티 도큐먼트를 검색해 봤는 데요 Description Returns the first active loaded object of Type type . first active loaded <- 이 말이 참 흥미롭더라구요 BaseScene이라는 컴포넌트는 유니크하기에 잘 찾겠지만 여러 게임 오브젝트가 동일한 컴포넌트를 들고있는 상태에선 어떤 게임오브젝트를 반환하나요?