스레드 풀 사용 모범 사례

이 항목에서는 스레드 풀 작업에 대한 모범 사례를 설명합니다.

해야 할 일

  • 스레드 풀을 사용하여 앱에서 병렬 작업을 수행합니다.

  • 작업 항목을 사용하여 UI 스레드를 차단하지 않고 확장 작업을 수행합니다.

  • 수명이 짧고 독립적인 작업 항목을 만듭니다. 작업 항목은 비동기적으로 실행되며 큐에서 순서에 따라 풀에 제출할 수 있습니다.

  • 업데이트를 UI 스레드로 보냅니다. WinUI 3 앱에서는 Microsoft.UI.Dispatching.DispatcherQueueDispatcherQueue.TryEnqueue를 사용합니다.

  • Sleep 함수 대신 ThreadPoolTimer.CreateTimer를 사용합니다.

  • 사용자 고유의 스레드 관리 시스템을 만드는 대신 스레드 풀을 사용합니다. 스레드 풀은 고급 기능을 사용하여 OS 수준에서 실행되며 프로세스 내 및 시스템 전체에서 디바이스 리소스 및 활동에 따라 동적으로 크기 조정하도록 최적화됩니다.

  • C++에서 작업 항목 대리자가 Agile 스레딩 모델을 사용하는지 확인합니다(C++ 대리자는 기본적으로 Agile임).

  • 사용 시 리소스 할당 오류를 허용할 수 없는 경우 미리 할당된 작업 항목을 사용합니다.

하지 말아야 할 것들

  • 기간 값<이 1밀리초(0 포함)인 정기 타이머를 만들지 마세요. 이로 인해 작업 항목이 1회성 타이머처럼 작동하게 됩니다.

  • period 매개 변수에 지정한 시간보다 완료하는 데 더 오래 걸리는 정기 작업 항목은 제출하지 마세요.

  • 백그라운드 작업에서 디스패치된 작업 항목으로 UI를 업데이트하려고 하지 마세요(토스트 알림과 알림 제외). 대신 백그라운드 작업 진행률 및 완료 처리기(예: IBackgroundTaskInstance.Progress)를 사용합니다.

  • 비동기 키워드를 사용하는 작업 항목 처리기를 사용하는 경우 작업 항목에서 전체 상태가 설정되었을 때 처리기의 모든 코드가 실행되었다고 가정하지 마세요. 처리기의 모든 코드가 실행되기 전에 스레드 풀 작업 항목을 전체 상태로 설정할 수 있습니다. 작업 항목이 전체 상태로 설정된 후 처리기 내에서 await 키워드를 따르는 코드가 실행 될 수 있습니다.

  • 미리 할당된 작업 항목을 다시 초기화하지 않고 두 번 이상 실행하지 마세요. 정기적인 작업 항목 만들기