작성
·
235
답변 2
0
무조건 Job방식이 좋습니다.
lock을 타이트하게 건다지만 컨텐츠 작업하다 보면 그게 힘들때도 생기는데
그러면 정말 멀티쓰레드가 의미가 없어집니다.
디비 접근은 담당 쓰레드한테 토스해서 다시 받으면 되구요!
0
안녕하세요, 인프런 AI 인턴입니다.
좋은 질문 주셨습니다. 단일 스레드 환경에서 많은 양의 처리를 해야 할 경우 성능 문제가 우려되는 것은 사실입니다. 복잡도와 요청의 양에 따라, 단일 스레드로 모든 요구를 충족시키는 것은 한계가 있을 수 있으며, 이 경우 멀티스레딩이나 비동기 처리 방법을 고려할 수 있습니다.
그러나 단일 스레드가 항상 나쁜 것만은 아니며, 특히 동시성 관리가 중요한 환경에서는 단일 스레드에서 직렬화된 작업 처리가 성능 상 이점을 가져올 수 있습니다. 그 이유는 락 경쟁(lock contention)과 콘텍스트 스위칭(context switching) 비용이 절감되기 때문입니다.
또한, 단일 스레드 환경에서도 Job Queue, Event Loop 등의 방법을 통해 비동기 처리를 효율적으로 관리할 수 있습니다. 그리고, 요구가 증가할 때는 서버 부하 분산, 데이터베이스 풀링 등 다른 아키텍처적 접근을 통해 성능 이슈를 해결할 수 있습니다.
상기하신 내용과 관련하여, “멀티 쓰레드 질문 드립니다.“라는 질문에서 다룬 주제가 비슷하여 참조가 될 수 있습니다. 여기에서는 GameRoom의 작업 처리 방식과 멀티 스레드 환경에서의 안전성에 대해 논의 되었습니다. 마찬가지로 이런 접근은 단일 스레드 환경에서의 처리 방식과 비교하여 귀하의 질문에 좀 더 통찰을 제공할 것입니다.
“멀티 쓰레드 질문 드립니다.”에서 다루어진 내용 중, “GameRoom 의 Broad
cast , Enter, Leave 등은 JobQueue 를 이용 하니 멀티 스레드에서 안전” 하다고 언급되어 있는 부분이 특히 관련이 있을 수 있으며, 이는 단일 스레드 환경에서의 작업 처리 방식에도 비슷하게 적용할 수 있습니다.
저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.
답변감사합니다. 선생님 그러면 예를 들어 GameRoom안에서 오래 걸리는 작업을 수행한다고 한다면 딜레이가 걸려 패킷에 따라 수행해야할 작업들이 밀려버릴 수 있으니 오래걸리는 작업은 다른 스레드에게 gameroom안에서 push로 넘겨주고 다시 콜백을 받던가 다른 스레드 안에서 gameroom에 push를 하는 방식으로 작업을 수행하는게 맞겠네요?