인프런 커뮤니티 질문&답변
ThreadLocal<SendBuffer> 관련 질문입니다.
작성
·
294
1
강의 듣다가 그림이 잘 안그려지는 부분이 있어서요.
경합을 피하기위해 각 쓰레드마다 고유의 SendBuffer를 갖게끔 만들어 준것 같은데 ,
제가 이해한대로면 , 예를들어 100명의 유저가 행동한 정보를 모아서 SendBuffer에 담아서 각 100명에게 다시 보내주는 방식으로 생각했습니다. 이런 과정을 하나의 작업 단위라고 보았을때 쓰레드 하나가 모두 처리하는 것인가요?
그러고 다음작업은 다른 스레드일수도있고 동일쓰레드일수도있고..
쓰레드 마다 고유의 SendBuffer가 있다면 서로 각각 내용물이 다르게 될텐데 강의에서 Knight 클래스의 정보를 담는 과정에서 다른 쓰레드가 바통터치하듯 중간에 낚아채는 경우는 없나요?
마지막 부분에 sendBuffer안에 있는 buffer는 다른 쓰레드가 참조는 하지만 읽기만 하기 때문에 상관 없다고 하셨는데 애당초 tls에 할당을 해준건데 참조가되나요?
답변 1
1
제가 이해한대로면 , 예를들어 100명의 유저가 행동한 정보를 모아서 SendBuffer에 담아서 각 100명에게 다시 보내주는 방식으로 생각했습니다. 이런 과정을 하나의 작업 단위라고 보았을때 쓰레드 하나가 모두 처리하는 것인가요?
-> 패킷을 만들고 보내주는 (혹은 Send를 예약하는) 역할은 단일 쓰레드에서 처리합니다.
그러고 다음작업은 다른 스레드일수도있고 동일쓰레드일수도있고..
쓰레드 마다 고유의 SendBuffer가 있다면 서로 각각 내용물이 다르게 될텐데 강의에서 Knight 클래스의 정보를 담는 과정에서 다른 쓰레드가 바통터치하듯 중간에 낚아채는 경우는 없나요?
-> TLS이기 때문에 쓰레드마다 고유합니다. 따라서 다른 쓰레드가 중간에 낚아챌 수는 없습니다.
마지막 부분에 sendBuffer안에 있는 buffer는 다른 쓰레드가 참조는 하지만 읽기만 하기 때문에 상관 없다고 하셨는데 애당초 tls에 할당을 해준건데 참조가되나요?
-> 네 주소 참조는 상관없습니다.
그런데 사실 위 부분은 게임 컨텐츠를 만들어서 패킷 수신/전송을 해봐야 의미를 알기 쉽습니다.
지금 잘 와닿지 않더라도 나중에 Part7을 하다 보면 감이 올거에요.





