Runtime: λ™μ‹œ GCκ°€ λ™μ‹œμ— μ‹€ν–‰λ˜μ§€ μ•ŠμŒ

에 λ§Œλ“  2019λ…„ 08μ›” 09일  Β·  3μ½”λ©˜νŠΈ  Β·  좜처: dotnet/runtime

λ™μ‹œ Gen2 GCκ°€ λ°±κ·ΈλΌμš΄λ“œ GC μŠ€λ ˆλ“œμ—μ„œ μ‹€ν–‰λ˜μ§€ μ•Šκ³  λŒ€μ‹  μ»¬λ ‰μ…˜μ„ 트리거 ν•œ μŠ€λ ˆλ“œμ—μ„œ μ‹€ν–‰λ˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μ΄λŠ” netcore 2.2μ—μ„œ 가끔 λ¬Έμ œκ°€ λ°œμƒν•©λ‹ˆλ‹€.

μ΄λŠ” κΈ°λ³Έ GC ν”„λ‘œν•„ (μ›Œν¬ μŠ€ν…Œμ΄μ…˜, λ™μ‹œ GC μ‚¬μš©, λŒ€ν™” ν˜• λŒ€κΈ° μ‹œκ°„ λͺ¨λ“œ)을 μ‚¬μš©ν•˜μ—¬ 64 λΉ„νŠΈ .NET Core 2.2 λŸ°νƒ€μž„μ˜ 릴리슀 κ΅¬μ„±μ—μ„œ 앱을 μ‹€ν–‰ν•˜λŠ” Windows 10 κ°œλ°œμ—μ„œ κ΄€μ°°λ˜μ—ˆμœΌλ©° μ„±λŠ₯보기 μƒ˜ν”Œμ„ κ°€μ Έμ˜¬ μˆ˜μžˆμ—ˆμŠ΅λ‹ˆλ‹€. λ°œμƒμ˜ :

blockingConcurrentGC

GC μ†ŒμŠ€λ₯Ό μ‚΄νŽ΄λ³΄λ©΄ 이 컀밋에 λ¬Έμ œκ°€μžˆμ„ 수 μžˆλ‹€κ³  μƒκ°ν•©λ‹ˆλ‹€. λ³€κ²½ν•˜κΈ° 전에 bgc_thread λŠ” μŠ€λ ˆλ“œ μƒμ„±μ‹œ μ„€μ •λ˜λ©° void gc_heap::garbage_collect (int n) μ—μ„œ 확인 될 λ•Œ β€‹β€‹μ„€μ •λ˜λ„λ‘ 보μž₯λ©λ‹ˆλ‹€. λ³€κ²½ ν›„ bgc_thread λŠ” 이제 μ‹€ν–‰ μ‹œμž‘μ‹œ μƒˆ μŠ€λ ˆλ“œ 내에 μ„€μ •λ©λ‹ˆλ‹€. μ΄λŠ” ν•΄λ‹Ή ν•„λ“œκ°€ λ™μ‹œ GCκ°€ κ³„μ†λ˜λŠ” μ‹œκ°„μ— μ„€μ •λ˜μ§€ μ•Šμ„ μˆ˜μžˆλŠ” 경쟁 쑰건을 λ„μž…ν•˜λŠ” κ²ƒμ²˜λŸΌ λ³΄μž…λ‹ˆλ‹€.

area-GC-coreclr question

κ°€μž₯ μœ μš©ν•œ λŒ“κΈ€

μ—¬κΈ°μ„œ μˆ˜ν–‰ 된 μ‹€μ œ GCκ°€ 더 이상 BGCκ°€ μ•„λ‹ˆλΌλŠ” 점을 μ§€μ ν•˜κ³  μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€. BGC μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•˜μ§€ λͺ»ν•œ κ²ƒμœΌλ‘œ μ²˜λ¦¬ν•˜λ―€λ‘œ λ‹¨μˆœνžˆ 전체 차단 GCλ₯Ό μˆ˜ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이 μ΄λ²€νŠΈλŠ” μ˜€ν•΄μ˜ μ†Œμ§€κ°€ μžˆμœΌλ―€λ‘œ (μ—¬μ „νžˆ Background라고 ν‘œμ‹œλ¨) BGCλ₯Ό μ‹€μ œλ‘œ μˆ˜ν–‰ν•˜μ§€ λͺ»ν•œ 경우 (BGC μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•˜μ§€ λͺ»ν•˜κ±°λ‚˜ λ‹€λ₯Έ 이유둜) ν•΄κ²°ν•΄μ•Όν•©λ‹ˆλ‹€.

λͺ¨λ“  3 λŒ“κΈ€

μ•„, 쒋은 발견!
@PeterSolMS , @VSadov μ—¬λŸ¬λΆ„ 쀑 ν•œ λͺ…이 μ‚΄νŽ΄λ³΄κ³  μˆ˜μ • ν•΄ μ£Όμ‹œκ² μŠ΅λ‹ˆκΉŒ?

μ—¬κΈ°μ„œ μˆ˜ν–‰ 된 μ‹€μ œ GCκ°€ 더 이상 BGCκ°€ μ•„λ‹ˆλΌλŠ” 점을 μ§€μ ν•˜κ³  μ‹Άμ—ˆμŠ΅λ‹ˆλ‹€. BGC μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•˜μ§€ λͺ»ν•œ κ²ƒμœΌλ‘œ μ²˜λ¦¬ν•˜λ―€λ‘œ λ‹¨μˆœνžˆ 전체 차단 GCλ₯Ό μˆ˜ν–‰ν•˜κ³  μžˆμŠ΅λ‹ˆλ‹€. 이 μ΄λ²€νŠΈλŠ” μ˜€ν•΄μ˜ μ†Œμ§€κ°€ μžˆμœΌλ―€λ‘œ (μ—¬μ „νžˆ Background라고 ν‘œμ‹œλ¨) BGCλ₯Ό μ‹€μ œλ‘œ μˆ˜ν–‰ν•˜μ§€ λͺ»ν•œ 경우 (BGC μŠ€λ ˆλ“œλ₯Ό μƒμ„±ν•˜μ§€ λͺ»ν•˜κ±°λ‚˜ λ‹€λ₯Έ 이유둜) ν•΄κ²°ν•΄μ•Όν•©λ‹ˆλ‹€.

bgc_thread μ„€μ • 경주의 경우 μ‹€μ œλ‘œμ΄ 쀄 뒀에 bgc_thread_stub , CreateSuspendableThread 에 μ„€μ •ν•  ν•„μš”κ°€ μ—†μŠ΅λ‹ˆλ‹€.

args.Thread = SetupUnstartedThread(FALSE);

Thread κ°μ²΄λŠ” 이미 μ‚¬μš© κ°€λŠ₯ν•©λ‹ˆλ‹€.이 ν•¨μˆ˜μ˜ λͺ¨λ“  이후 λ‘œμ§μ€ 생성 된 Threadλ₯Ό λ³€κ²½ν•˜μ§€ μ•ŠμŠ΅λ‹ˆλ‹€.

이 νŽ˜μ΄μ§€κ°€ 도움이 λ˜μ—ˆλ‚˜μš”?
0 / 5 - 0 λ“±κΈ‰