인프런 커뮤니티 질문&답변
12분 40초 질문
작성
·
239
0
1. A라는 쓰레드가 Push에서 락을 잡는다.(다른애가 Push를 못하는 상황)
그리고 _jobQueue에다가 일감을 밀어 넣는다.
2. lock 안에서 flush가 true로 바뀌어서 Flush함수로 간다.
3. A쓰레드는 Flush함수에 들어와서 while문안에서 Pop을 한다.
4. Flush에서 Pop을 하는 순간 A는 락을 잡고 "_jobQueue.Count == 0" 이 될때까지
retrun _jobQueue.Dequeue();를 하면서 Flush의 while문을 돌게된다.
*********
<질문>
A라는 쓰레드가 Push에 와서 최초의 _flush를 true로 바꾸어 주어서
모든 쓰레드들이 접근이 가능한 _flush는 true인 상태여서
A가 Flush함수를 실행하러 계속 안에 있고
다른 B라는 쓰레드가 Push에와서 락을 잡고 일감을 밀어 넣는다고 해도
_flush는 true라서
Push안의 flush를 true로 바꿀 수 없어서
if (flush)에 조건이 안맞아 락만 걸고 일감을 밀어넣고 나오고
A만 Flush를 실행할 수 있고 A만 Flush함수에 계속 상주해 있고
다른애들이 계속 일감만 밀어 넣어주는 방식인가요??
Pop에서 락을 건 이유는 그냥 데이터를 안전하게 꺼내기 위함이고...
이렇게 이해했는데 맞을까요??
퀴즈
다수 클라이언트의 동시 요청을 서버에서 즉시 처리할 때 주로 발생하는 문제점은 무엇일까요?
패킷 순서가 뒤바뀔 수 있습니다.
멀티스레딩 충돌 및 병목 현상이 발생할 수 있습니다.
클라이언트의 응답 속도가 느려집니다.
서버 메모리 사용량이 급증합니다.





