Job System 돌아가는 방식에 대해 궁금합니다
안녕하세요 루키스님. 또 똑같은 주제로 질문을 드려 죄송합니다 ㅠㅠ 제가 이해한 줄 알았는데 계속해서 생각해보고 반복해서 읽어보는데 Part4에 대한 JobQueue 내용을 듣고 왔는데 한번 더 궁금증이 생겼습니다 C#에서는 일감이 계속 밀리면 ThreadPool 차원에서 쓰레드가 돌아오지 않으니까 쓰레드풀에서 계속해서 새로운 작업자 쓰레드를 가져와서 실행시키게 된다고 하셨습니다. 그리고 JobQueue를 이용하면 1개의 쓰레드만이 작업을 실행하는 것을 보장시켜준다고 하셨는데 JobQueue를 사용하는 이유는 C#의 쓰레드풀에서 계속해서 쓰레드 배치를 시키지 않기 위해서인건가요? JobQueue를 사용하지 않으면 클라이언트로부터 패킷이 오면 lock을 잡고 브로드캐스팅하는 과정까지 기다리게 되므로 이 시간동안 C#의 쓰레드풀에서 계속해서 작업자 쓰레드를 가져오게 되는 것이고 JobQueue를 사용하게 되면 Job을 Push하는 쓰레드는 1개로 보장이 되며 Deque하는 쓰레드도 1개로 보장이 되므로 BottleNeck 현상이 줄어들면서 C#의 쓰레드풀이 작업자 쓰레드를 적게 배치하게 되는 것 인가요? 그리고 Job이라는 개념을 둔 시스템에서는 다른 애가 이미 Job 비우는 작업을 실행중일 경우Job을 Push만 하고 바로 빠져나와 자기 할 일을 하러 간다고 하셨는데 Job에다가 일을 Enqueue할 때도 lock이 필요하고 Dequeue하는 상황에도 lock이 필요한데 Job을 비우는 작업을 실행중인 경우에는 lock을 획득하고 있는 쓰레드가 있을텐데 그 상황에서 Push를 하는 것이 어떻게 가능한 건가요?