부록
이 항목에서는 스레드 찾기 문서에서 참조하는 추가 기능을 제공합니다.
부록 A: ETL 추적을 만드는 배치 파일
echo OFF
REM Use the name on the command line for the capture or use the default.
set ETWName=%1
if "%1"=="" set ETWName=ThreadData
REM Wait until a game has been launched.
xbconnect /WT /QG
REM This is the save path on the console, not on your computer.
set SavePath=d:\
xbdir /x/title xd:\profile > NUL
if %ERRORLEVEL% EQU 0 set SavePath=%SavePath%profile\
REM Start the capture on the Default Console.
xbrun /x/title /O xperf -start -on DISPATCHER+PROC_THREAD+LOADER+CSWITCH+PROFILE -stackwalk PROFILE+CSWITCH+READYTHREAD -f %SavePath%%ETWName%.etl
REM Wait for the user to press a key to stop the capture.
PAUSE
REM Stop the capture, merging the file to resolve events.
xbrun /x/title /O xperf -stop -d %SavePath%%ETWName%_merge.etl
REM Copy the .etl file over to the PC, and then open it.
xbcp /x/title x%SavePath%%ETWName%_merge.etl
start %ETWName%_merge.etl
부록 B: 스레드 상태를 이해합니다(실행 중, 일시 중단/대기 중, 준비 상태)
스레드는 여러 가지 상태일 수 있습니다. 그러나 이 섹션의 목적을 위해 다음 세 가지 상위 수준의 상태 클래스를 이해하는 것이 중요합니다.
- 실행 중: CPU 코어에서 스레드가 실행되고 있습니다.
- 일시 중단/대기 중: 스레드가 실행되고 있지 않으며 다른 상태로 될 때까지 기다리는 중입니다.
- 준비됨: CPU 코어로 스레드를 예약할 준비가 되지만 아직 실행 예약되지 않았습니다.
다음은 이러한 상태들이 상호 작용할 수 있는 방법의 예입니다. 스레드A가 실행 중일 때 공유 리소스가 한 동시에 두 개 이상의 스레드에 액세스하지 못하게 보호하는 잠금이 확보됩니다. 스레드B도 실행되고 같은 리소스에 액세스하여 동일한 잠금을 확보하려고 시도합니다. 잠금이 현재 스레드에 의해 유지되기 때문에 스레드B가 기다립니다. 나중에 스레드A는 공유 리소스의 잠금을 해제하고, 그 결과 스레드B가 읽기 상태가 됩니다. 이 작업은 스레드B가 CPU 코어에 대해 예약할 준비가 됐는지 스케줄러에게 알릴 수 있습니다. 스레드B가 예약된 경우 컨텍스트 전환이 있습니다. 스레드A는 스레드B를 준비 상태로 만든 호출 스택과 함께 "다음에 의해 준비된"스레드("준비 중 스레드"라고도 함)로 나열됩니다.