인프런 커뮤니티 질문&답변

김병대님의 프로필 이미지
김병대

작성한 질문수

[C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버

JobTimer

PriorityQueue 관련 질문

해결된 질문

작성

·

209

0

안녕하세요.

PriorityQueue를 직접 구현 하셨는데,

혹시 .NET 6부터 제공하기 시작한 PriorityQueue<TElement, TPriority>를 사용해도 괜찮은지 궁금하여 질문 드립니다!

 

class JobTimer {

    PriorityQueue<Action, int> pq = new();

    object _lock = new();

    public static JobTimer Instance { get; } = new();

    public void Push(Action action, int tickAfter = 0) {

        lock (_lock) {

            pq.Enqueue(action, Environment.TickCount + tickAfter);

        }

    }

    public void Flush() {

        while (true) {

            int now = Environment.TickCount;

            Action? action = null;

            lock (_lock) {

                if (pq.Count == 0) break;

                pq.TryPeek(out action, out var execTick);

                if(execTick > now) break;

                pq.Dequeue();

            }

            if(action != null) action.Invoke();

        }

    }

}

답변 2

0

김병대님의 프로필 이미지
김병대
질문자

유니티와 연결되는 강의임을 망각했네요..

 

https://docs.unity3d.com/kr/2023.2/Manual/CSharpCompiler.html

질문 작성일자 기준으로 유니티 최신버전에서 지원하는 C# 컴파일러는 C# 9.0(.NET 5.x) 버전을 기준으로 하고 있어 PriorityQueue를 아직 사용하지 못하는 것 같습니다.

 

마지막 섹터까지 봐야 알겠지만, Server 프로젝트 자체는 유니티에서 구동되는게 아니니까 문제는 없지 않을까 생각합니다. 만약, PriorityQueue를 유니티단에서 사용해야 할 일이 생긴다면 ServerCore에 추가하고 바꿔치기 하면 될 것 같습니다!

0

안녕하세요, 인프런 AI 인턴입니다.

김병대 님의 질문은 .NET 6에서 제공하는 PriorityQueue<TElement, TPriority> 사용에 관한 것으로 보입니다. 해당 기능은 부제목 [C#과 유니티로 만드는 MMORPG 게임 개발 시리즈] Part4: 게임 서버의 강의 내용과 관련이 있게 보입니다.

직접 구현한 PriorityQueue와 .NET 6 부터 제공하는 PriorityQueue<TElement, TPriority> 클래스의 사용에 대해 궁금해 하셨는데, 이와 관련하여 강의 내 또는 다른 사용자들의 유사 질문과 그에 대한 답변을 찾아보았으나, 정확히 일치하는 것은 없었습니다.

.NET 6의 PriorityQueue<TElement, TPriority>는 표준 라이브러리에 포함된 우선순위 큐 구현으로, 요소들을 관리하고 우선순위에 따라 처리하는 기능을 제공합니다. 당연히 새로운 프로젝트나 기존 프로젝트에서 해당 클래스를 사용하는 것이 가능하며, 이는 독자적인 구현을 대체할 수 있는 효율적인 방법일 수 있습니다. 단, 강의 내에서 별도로 구현한 클래스의 사용을 요구하거나 그 구현을 통해 중요한 개념을 학습하는 경우가 있을 수 있으니, 이 점을 고려하여 결정하시는 것이 좋습니다.

사용 가능한 여부를 먼저 강의의 지식공유자나 다른 수강생들과 공유 게시판 등을 통해 논의해보시는 것이 좋을 것 같습니다. 직접 구현한 PriorityQueue의 코드와 .NET 6의 PriorityQueue<TElement, TPriority>를 비교하면서 각각의 장단점을 이해하실 수도 있을 것입니다.

저는 질문자님의 이해를 돕고자 지식공유자님의 기존 답변을 참고하여 유사한 답변 링크를 추천해드리고 있습니다.
현재 베타 기능으로 답변이 만족스럽지 않을 수 있는 점 양해 부탁드립니다. 🙏
추가적으로 궁금한 점이 있으시면, 이어서 질문해 주세요. 곧 지식공유자께서 답변해 주실 것입니다.

김병대님의 프로필 이미지
김병대

작성한 질문수

질문하기