인프런 커뮤니티 질문&답변
distribute 질문 있습니다
작성
·
251
0
void JobTimer::Distribute(uint64 now)
{
// 한 번에 1 쓰레드만 통과
if (_distributing.exchange(true) == true)
return;
Vector<TimerItem> items;
{
WRITE_LOCK;
while (_items.empty() == false)
{
const TimerItem& timerItem = _items.top();
if (now < timerItem.executeTick)
break;
items.push_back(timerItem);
_items.pop();
}
}
for (TimerItem& item : items)
{
if (JobQueueRef owner = item.jobData->owner.lock())
owner->Push(item.jobData->job);
ObjectPool<JobData>::Push(item.jobData);
}
// 끝났으면 풀어준다
_distributing.store(false);
}
push해줄때 pushonly값을 true로 넘겨주어야 하는 것 아닌가요?
퀴즈
MMO 서버 환경에서 동시 접속자 증가에 따른 성능 문제를 해결하기 위해 단순 락킹 대신 잡 큐를 사용하는 주된 이유는 무엇일까요?
데이터베이스 접근 속도를 높이기 위해서입니다.
클라이언트와의 통신을 암호화하기 위해서입니다.
여러 스레드가 공유 자원에 효율적으로 접근하고 병목 현상을 줄이기 위해서입니다.
서버 재부팅 없이 업데이트를 적용하기 위해서입니다.





