소개
게시글
질문&답변
SocketAsyncEventArgs 의 EventHandler와 threadPool
혹시 저와같이 디버깅도 안되는 수많은 작업쓰레드의 정체에 대하여 궁금중을 가지고 계신분들에게 제 나름대로 찾은 답을 공유해봅니다. C#의 threadPool에는 2가지 thread가 있는데 하나는 일반적인 worker thread이고 또하나는 I/O작업이 완료되었을때의 작업을 담당하는 (I/O) completion port thread가 입니다. 소켓통신은 CPU가 아니라 I/O단에서 이루어지는 작업이기 때문에 SocketAsyncEventArgs의 Complete eventHandler는 completion port thread가 담당하여 invoke합니다 (Pending == true일때만 입니다). (해당 쓰레드가 디버깅이 안될때가 많은 이유는 complete이벤트를 다 끝내고 해당 쓰레드풀과 관련된 내부 로직을 실행하고있거나 waiting 상태이기 때문인것 같습니다.) 따라서 complete 이벤트에 무거운 작업을 연결해준다면 소켓통신이 완료될때마다 해당 I/O complete를 담당할 쓰레드가 부족하기 때문에 지속적으로 새로운 completion port thread가 생성되고 이는 리소스 낭비로 이어집니다. 제 실습 프로젝트의 경우에서는 completion port thread가 packet 역직렬화와 log를 찍는 작업을 포함하는 일련의 작업을 수행하고 그렇게 생성된 packet을 packet Handler담당 쓰레드에게 던져주고 있었기 때문에 client수가 많아질수록 스레드수가 급격하게 많아지는등 여러가지 문제가 발생했는데 위의 작업을 lambda로 묶어 통채로 packet handler에게 던져주기만을 하게 수정했더니 쓰레드 생성수가 눈에띄게 줄었고 어느정도 시간이 지나면 전체 쓰레드수도 어느정도 일정하게 유지됨을 확인했습니다. 공부하는데 가장 도움이 많이 된 자료는 Jeffrey Richter의 CLR via C#, 그리고 같은 저자의 C++ 관련 책입니다. 짧은 지식으로 찾은 정보이기 때문에 정확하지 않을수 있습니다. 잘못된 정보가 있다면 알려주세요. 감사합니다.
- 0
- 2
- 560
질문&답변
Custom db?
답변 감사합니다
- 1
- 2
- 394
질문&답변
Listener 관련 질문
답변 감사합니다 혹시라도 운이 없어서 하나의 물고기에 2개 이상의 낚시대가 반응 (args.completed 이벤트 발생)할수도 있다고 생각했는데 그러한 일이 발생할수도 있나요?
- 0
- 2
- 264
질문&답변
send와 lock
답변 감사합니다. 그렇다면 send를 하는 거의 모든 부분에 lock이 결려있는 상태인데 성능을 고려했을때 lock을 거는 부분은 적을수록 적절하다고 알고있습니다. 여기서 lock을 잡는 부분을 줄이거나 좀더 최적화를 하려는 시도가 의미가 있나요 아니면 이러한 구조는 이미 오랜시간 최적화가 끝난 결과물이므로 이대로 받아들이는것이 좋나요?
- 1
- 2
- 271
질문&답변
Json 파일 추가시 에러
저도 동일한 오류를 경험했습니다. 제 경우에는 유니티에서 Edit -> Preferences -> External Tools -> Regenerate project files을 다시 하니 해결되었습니다. 그리고 유니티를 실행하기 전에 비주얼스튜디오를 먼저 실행하고 그 다음 유니티를 실행하였습니다.
- 0
- 2
- 527
질문&답변
anchor 질문이요
왼쪽 위에 WORLD LOCAL 변경하는 버튼 옆에 PIVOT CENTER를 변경하는 버튼을 눌러보세요
- 0
- 6
- 339
질문&답변
Input질문
답변 감사드립니다. PlayerController 의 start부분에 Onkeyboard를 구독하셨는데 키보드 입력은 play를 한 후 매순간 발생할 수 있는데 어째서 Update()에서가 아니라 Start부분에 해당 코드를 작성했는지, 그러나 유니티에 연결했을 때 해당코드가 어느 부분에 있더라도 캐릭터가 동작을 동일하게 하는 이유가 궁금합니다.
- 0
- 3
- 171
질문&답변
Speed
매번 빠르고 친절하게 답변해주셔서 감사합니다. 강의 잘 듣고 있습니다.
- 1
- 2
- 269
질문&답변
가져오기(impoting)에서 더이상 진행이 안되요
저도 이것과 동일한 문제를 경험했습니다. 다만 저 로딩창이 유니티의 위 메뉴부분을 클릭하면 없어지긴 했습니다. 저의 경우에는 먼저 유니티 프로젝트를 생성하고 유니티를 종료시킨 다음 비주얼 스튜디오에서 먼저 생성한 프로젝트파일을 열고, 그 다음에 유니티를 실행시키니 해당 증상이 사라졌습니다. 다만 아직 이 다음강의를 듣지 못해서 이렇게 실행하는 것이 나중에 새로운 오류를 유발할지는 모르겠습니다. 도움이 되었으면 좋겠네요
- 0
- 2
- 318
질문&답변
heap
감사합니다.
- 0
- 2
- 271