Performance Hints (KR)
## TL;DR
์ฑ๋ฅ ์ต์ ํ๋ โ๋์ค์โ ํ๋ ์์ ๊ฐ ์๋๋ผ, ์ค๊ณ ๋จ๊ณ์์๋ถํฐย ์ปดํจํฐ ๋ฆฌ์์ค์ ๋น์ฉ์ ๊ณ์ฐํ๊ณ ๋ญ๋น๋ฅผ ์ต์ํํ๋ ์ ํ์ ํ๋ ๊ณผ์ ์ ๋๋ค. ์๊ณ ๋ฆฌ์ฆ์ ํจ์จ์ฑ, ๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์์ ์กฐ๋ฐํจ, ๊ทธ๋ฆฌ๊ณ ๋ถํ์ํ ๋ฉ๋ชจ๋ฆฌ ํ ๋น์ ์ค์ด๋ ๊ฒ์ด ํต์ฌ์ ๋๋ค.
## Overview
1. ์ฑ๋ฅ ์ฌ๊ณ ๋ฐฉ์์ ์ค์์ฑ (The Importance of Thinking about Performance)
- ์ฑ๋ฅ ์ค์ฌ ์ค๊ณ: โ๋์ค์ ํ๋กํ์ผ๋งํด์ ๊ณ ์น์โ๋ ์๊ฐ์ ๋ณ๋ชฉ ์ง์ ์ด ๋์ฒ์ ๊น๋ ค ๊ณ ์น ์์กฐ์ฐจ ์๋ โํํํ ํ๋กํ์ผโ์ ๋ง๋๋ฏ๋ก, ์ฒ์๋ถํฐ ํจ์จ์ ์ธ ๋์์ ์ ํํด์ผ ํฉ๋๋ค.
2. ์ถ์ (Estimation)
-
์ฑ๋ฅ ์ง๊ด ๊ธฐ๋ฅด๊ธฐ: ์์ฑ ์ค์ธ ์ฝ๋๊ฐ ํ ์คํธ์ฉ์ธ์ง, ๋ผ์ด๋ธ๋ฌ๋ฆฌ์ฉ์ธ์ง, ํน์ ํซ ํจ์ค(Hot path)์ธ์ง์ ๋ฐ๋ผ ์ด๋ ์ ๋์ ๋ณต์ก์ฑ์ ๊ฐ์ํ ์ง ๊ฒฐ์ ํฉ๋๋ค.
-
์ด๋ฆผ์ง์ ๊ณ์ฐ (Back-of-the-envelope): L1 ์บ์(0.5ns)๋ถํฐ ๋์คํฌ ํ์(5ms)๊น์ง์ ๋น์ฉ์ ๊ณ์ฐํด ์ด๋ค ์ค๊ณ๊ฐ ์ ๋ฆฌํ ์ง ๊ตฌํ ์ ์ ํ๋จํฉ๋๋ค.
3. ์ธก์ (Measurement)
-
์ธก์ ์ ๊ฐ์น: ์ต์ํ์ง ์์ ์ฝ๋๋ฅผ ํ๋กํ์ผ๋งํ๋ ๊ฒ์ ๊ตฌ์กฐ ํ์ ์๋ ๋์์ด ๋๋ฉฐ, ๊ฐ์ ์ ํ์ ์ด์ ์ ์ ๋ฐํ๊ฒ ํ์ธํ๋ ์ ์ผํ ๋ฐฉ๋ฒ์ ๋๋ค.
-
ํ๋กํ์ผ๋ง ๋๊ตฌ ๋ฐ ํ:ย pprof๋ย perf๋ฅผ ํ์ฉํ๊ณ , ์ด์ ํ๊ฒฝ๊ณผ ์ ์ฌํ ์กฐ๊ฑด์์ ๋ง์ดํฌ๋ก๋ฒค์น๋งํฌ๋ฅผ ์ํํ์ฌ ๊ฒฐ๊ณผ๋ฅผ ๊ฒ์ฆํฉ๋๋ค.
-
ํ๋กํ์ผ์ด ํํํ ๋ (What to do when profiles are flat): ๋๋ ทํ ๋ณ๋ชฉ์ด ์๋ค๋ฉด ์์ ๊ฐ์ 20๊ฐ๋ฅผ ๋ชจ์ผ๊ฑฐ๋, ๋ฃจํ ๊ตฌ์กฐ ๋ณ๊ฒฝ, ํ ๋น ํ์ ์ค์ด๊ธฐ, ํ๋์จ์ด ์นด์ดํฐ ๋ถ์ ๋ฑ์ ์๋ํฉ๋๋ค.
4. API ์ค๊ณ ๊ณ ๋ ค์ฌํญ (API Considerations)
-
๋๋ ์ฒ๋ฆฌ API (Bulk APIs): ํจ์ ํธ์ถ ์ค๋ฒํค๋์ ์ ๊ธ ๋น์ฉ์ ์ค์ด๊ธฐ ์ํด ์ฌ๋ฌ ํญ๋ชฉ์ ํ ๋ฒ์ ์ฒ๋ฆฌํ๋ ์ธํฐํ์ด์ค๋ฅผ ์ ๊ณตํฉ๋๋ค.
-
๋ทฐ ํ์ (View types):ย string_view๋ย Spanย ๋ฑ์ ์ฌ์ฉํ์ฌ ๋ฐ์ดํฐ ๋ณต์ฌ ์์ด ๋ฉ๋ชจ๋ฆฌ ์์ญ๋ง ์ฐธ์กฐํ๊ฒ ํฉ๋๋ค.
-
์ฌ์ ํ ๋น/๊ณ์ฐ๋ ์ธ์: ํธ์ถ์๊ฐ ์ด๋ฏธ ์๊ณ ์๋ ์ ๋ณด๋ฅผ ๋ฃจํด์ ๋๊ฒจ์ฃผ์ด ๋ด๋ถ์ ์ค๋ณต ๊ณ์ฐ์ด๋ ํ ๋น์ ๋ฐฉ์งํฉ๋๋ค.
-
์ค๋ ๋ ํธํ vs ์ค๋ ๋ ์์ : ๋ฌด์กฐ๊ฑด ๋ด๋ถ ์ ๊ธ์ ๊ฑธ๊ธฐ๋ณด๋ค, ํธ์ถ์๊ฐ ๋๊ธฐํ๋ฅผ ์ฑ ์์ง๋ โ์ค๋ ๋ ํธํโ ํ์ ์ ๊ธฐ๋ณธ์ผ๋ก ํ์ฌ ์ฑ๋ฅ ์์ค์ ๋ง์ต๋๋ค.
5. ์๊ณ ๋ฆฌ์ฆ ๊ฐ์ (Algorithmic Improvements)
- ๊ทผ๋ณธ์ ์ต์ ํ: O(Nยฒ) ๋ก์ง์ O(N log N)์ผ๋ก ๋ฐ๊พธ๊ฑฐ๋, ์ต์ ๋ ผ๋ฌธ์ ๊ธฐ๋ฐํ ๋ ๋น ๋ฅธ ๋ฐ์ดํฐ ๊ตฌ์กฐ(์: Pearce-Kelly ์๊ณ ๋ฆฌ์ฆ)๋ก ๊ต์ฒดํฉ๋๋ค.
6. ๋ ๋์ ๋ฉ๋ชจ๋ฆฌ ํํ (Better Memory Representation)
-
์กฐ๋ฐํ ๋ฐ์ดํฐ ๊ตฌ์กฐ (Compact data structures): ์บ์ ํจ์จ์ ๋์ด๊ธฐ ์ํด ๋ฐ์ดํฐ๋ฅผ ๋ฉ๋ชจ๋ฆฌ์ ๋นฝ๋นฝํ๊ฒ ์ฑ์ ๋ฃ์ต๋๋ค.
-
๋ฉ๋ชจ๋ฆฌ ๋ ์ด์์ (Memory layout): ํ๋ ์์๋ฅผ ์กฐ์ ํด ํจ๋ฉ์ ์ค์ด๊ณ , ์์ฃผ ์ฐ๋ ํ๋๋ฅผ ๋ชจ์ ์บ์ ๋ฏธ์ค๋ฅผ ๋ฐฉ์งํฉ๋๋ค.
-
ํฌ์ธํฐ ๋์ ์ธ๋ฑ์ค (Indices instead of pointers): 64๋นํธ ํฌ์ธํฐ ๋์ ์์ ์ ์ ์ธ๋ฑ์ค๋ฅผ ์จ์ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋๊ณผ ๊ฐ์ ์ฐธ์กฐ ๋น์ฉ์ ์ค์ ๋๋ค.
-
๋ฐฐ์น ์ ์ฅ (Batched storage): ์์๋ง๋ค ๊ฐ๋ณ ํ ๋นํ์ง ์๊ณ ์ฒญํฌ(Chunk) ๋จ์๋ก ๋ฌถ์ด ํ ๋นํ์ฌ ๊ด๋ฆฌ ์ค๋ฒํค๋๋ฅผ ์ค์ ๋๋ค.
-
์ธ๋ผ์ธ ์ ์ฅ (Inlined storage): ์์๊ฐ ์ ์ ๋๋ ํ ํ ๋น ์์ด ๊ฐ์ฒด ๋ด๋ถ ๊ณต๊ฐ์ ์ง์ ํ์ฉ(InlinedVector ๋ฑ)ํฉ๋๋ค.
-
๋ถํ์ํ๊ฒ ์ค์ฒฉ๋ ๋งต: ๋งต ์์ ๋งต์ ๋๊ธฐ๋ณด๋ค ๋ณตํฉ ํค๋ฅผ ์ฌ์ฉํ๋ ๋จ์ผ ๋งต์ผ๋ก ๊ตฌ์ฑํด ์กฐํ ํ์๋ฅผ ์ค์ ๋๋ค.
-
์๋ ๋ (Arenas): ์๋ช ์ด ๋น์ทํ ๊ฐ์ฒด๋ค์ ํฐ ๋ฉ๋ชจ๋ฆฌ ๋ธ๋ก์ ํ๊บผ๋ฒ์ ํ ๋นํ๊ณ ์๋ฉธ ๋น์ฉ์ ์ต์ํํฉ๋๋ค.
-
๋งต ๋์ ๋ฐฐ์ด: ํค ๋ฒ์๊ฐ ์๋ค๋ฉด ๋งต ๋์ ๋จ์ ๋ฐฐ์ด์ ์ฌ์ฉํ์ฌ O(1) ์ฑ๋ฅ์ ํ๋ณดํฉ๋๋ค.
-
์ ๋์ ๋นํธ ๋ฒกํฐ: ์ ์ ์งํฉ์ ๋นํธ ๋ฒกํฐ๋ฅผ ์ฌ์ฉํ์ฌ ๋ฉ๋ชจ๋ฆฌ ์ฌ์ฉ๋์ ๊ทน๋จ์ ์ผ๋ก ์๋ผ๊ณ ์ฐ์ฐ์ ๊ฐ์ํฉ๋๋ค.
7. ํ ๋น ์ค์ด๊ธฐ (Reduce Allocations)
-
๋ถํ์ํ ํ ๋น ํผํ๊ธฐ: ๋น ๊ฐ์ฒด ์์ฑ ๋์ ์ ์ (Static) ๊ฐ์ฒด๋ฅผ ์ฌ์ฌ์ฉํ๊ฑฐ๋ ํ ๋์ ์คํ์ ์ ๊ทน ํ์ฉํฉ๋๋ค.
-
์ปจํ ์ด๋ ํฌ๊ธฐ ์กฐ์ (Resize or reserve): ์์ ํฌ๊ธฐ๋ฅผ ๋ฏธ๋ฆฌย reserve()ํ์ฌ ๋ฐ์ดํฐ ์ด๋๊ณผ ๋ฉ๋ชจ๋ฆฌ ์ฌํ ๋น ์ค๋ฒํค๋๋ฅผ ๋ง์ต๋๋ค.
-
๋ณต์ฌ ํผํ๊ธฐ: ์ด๋ ์๋งจํฑ(Move)์ ํ์ฉํ๊ณ , ํฐ ๊ฐ์ฒด ์์ฒด๋ฅผ ์ฎ๊ธฐ๊ธฐ๋ณด๋ค ํฌ์ธํฐ๋ ์ธ๋ฑ์ค ๋ฐฐ์ด์ ์ ๋ ฌํฉ๋๋ค.
-
์์ ๊ฐ์ฒด ์ฌ์ฌ์ฉ: ๋ฃจํ ์์์ ๊ฐ์ฒด๋ฅผ ๋งค๋ฒ ์ ์ธํ์ง ๋ง๊ณ ๋ฃจํ ๋ฐ์์ ์ ์ธํ์ฌ ๋ด๋ถ ๋ฒํผ๋ฅผ ๊ณ์ ์ฌ์ฌ์ฉํฉ๋๋ค.
8. ๋ถํ์ํ ์์ ํผํ๊ธฐ (Avoid Unnecessary Work)
-
๊ณตํต ์ผ์ด์ค์ ๋น ๋ฅธ ๊ฒฝ๋ก (Fast paths): ๋๋ค์๋ฅผ ์ฐจ์งํ๋ ๋จ์ํ ์ผ์ด์ค๋ฅผ ๋จผ์ ์ฒดํฌํ์ฌ ๋ฌด๊ฑฐ์ด ๋ก์ง์ ๊ฑด๋๋๋๋ค.
-
๊ฐ๋น์ผ ์ ๋ณด ์ฌ์ ๊ณ์ฐ: ๋ฐ๋ณต์ ์ผ๋ก ์ฐ์ด๋ ๋น์ผ ์ฐ์ฐ ๊ฒฐ๊ณผ๋ ๋ฏธ๋ฆฌ ๊ณ์ฐํด์ ์ ์ฅํด ๋ก๋๋ค.
-
๊ฐ๋น์ผ ๊ณ์ฐ์ ๋ฃจํ ๋ฐ์ผ๋ก ์ด๋: ๋ฃจํ๋ฅผ ๋ ๋๋ง๋ค ๋ณํ์ง ์๋ ๊ฐ์ ๋ฃจํ ์์ ์ ์ ๋ฏธ๋ฆฌ ๊ณ์ฐํฉ๋๋ค.
-
๊ฐ๋น์ผ ๊ณ์ฐ ์ง์ฐ (Defer): ์ ๋ง๋ก ๊ฒฐ๊ณผ๊ฐ ํ์ํ ์์ ๊น์ง ์ฐ์ฐ์ ์ํํ์ง ์๊ณ ์ต๋ํ ๋ฏธ๋ฃน๋๋ค.
-
์ฝ๋ ํน์ํ (Specialize code): ๋ฒ์ฉ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ๋์ ํน์ ์ํฉ์๋ง ๋ฑ ๋ง์ถ ์ฝ๋๋ฅผ ์์ฑํด ๋ฒ์ฉ ๊ธฐ๋ฅ์ ์ค๋ฒํค๋๋ฅผ ๋บ๋๋ค.
-
์บ์ฑ ํ์ฉ: ์ด์ ์ ์ํํ ์์ ๊ฒฐ๊ณผ๋ฅผ ์ ์ฅํด ๋๊ณ ๋ค์ ํธ์ถ๋ ๋ ์ฆ์ ๋ฐํํฉ๋๋ค.
9. ์ปดํ์ผ๋ฌ์ ์์ ๋๊ธฐ (Make the compilerโs job easier)
- ์ต์ ํ ํํธ ์ ๊ณต: ํซ ํจ์ ๋ด ํธ์ถ ์ ๊ฑฐ, ๋ก์ปฌ ๋ณ์ ๋ณต์ฌ๋ฅผ ํตํ ์์ผ๋ฆฌ์ด์ฑ ๋ฐฉ์ง, ์๋ ๋ฃจํ ์ธ๋กค๋ง ๋ฑ์ ํตํด ์ปดํ์ผ๋ฌ๊ฐ ๋ ๋์ ๊ธฐ๊ณ์ด๋ฅผ ๋ฝ๊ฒ ๋์ต๋๋ค.
10. ํต๊ณ ์์ง ๋น์ฉ ์ ๊ฐ (Reduce stats collection costs)
- ํต๊ณ ์ต์ ํ: ์ฐ์ด์ง ์๋ ํต๊ณ๋ ๊ณผ๊ฐํ ์ญ์ ํ๊ณ , ์ํ๋ง(Sampling)์ ํตํด ์ผ๋ถ ์์ฒญ๋ง ๊ธฐ๋กํ์ฌ ๋ถํ๋ฅผ ๋ฎ์ถฅ๋๋ค.
11. ๋ก๊น ์ต์ ํ (Avoid logging on hot code paths)
- ๋ก๊น ์ ๊ฑฐ ๋ฐ ์ง์ฐ: ์์ฃผ ์คํ๋๋ ๊ตฌ๊ฐ์์๋ ๋ก๊ทธ ํ์ฑํ ์ฌ๋ถ๋ฅผ ๋ฏธ๋ฆฌ ์ฒดํฌํ๊ฑฐ๋ ์์ ๋ก๊น ์ ๋นผ์ ์คํ ์๋๋ฅผ ์งํต๋๋ค.
12. ์ฝ๋ ํฌ๊ธฐ ๊ณ ๋ ค์ฌํญ (Code Size Considerations)
-
์์ฃผ ์ธ๋ผ์ธ๋๋ ์ฝ๋ ๋ค๋ฌ๊ธฐ: ๋๋ฆฌ ์ฐ์ด๋ ํจ์์ ์๋ฌ ์ฒ๋ฆฌ ๋ฑ ํฐ ์ฝ๋๋ ์ธ๋ผ์ธ์์ ์ ์ธํด ๋ฐ์ด๋๋ฆฌ ๋น๋ํ๋ฅผ ๋ง์ต๋๋ค.
-
์ ์คํ ์ธ๋ผ์ธํ: ๋ฌด๋ถ๋ณํ ์ธ๋ผ์ธ์ ๋ฐ์ด๋๋ฆฌ๋ฅผ ํค์ ๋ช ๋ น์ด ์บ์ ํจ์จ์ ๋จ์ด๋จ๋ฆฌ๋ฏ๋ก ์ ์ ํ ์กฐ์ ํฉ๋๋ค.
-
ํ ํ๋ฆฟ ์ธ์คํด์คํ ๊ฐ์: ๊ณตํต ๋ก์ง์ ํ ํ๋ฆฟ ๋ฐ์ผ๋ก ๋ถ๋ฆฌํด ๋ถํ์ํ๊ฒ ๋ณต์ ๋๋ ๊ธฐ๊ณ์ด ์ฝ๋๋ฅผ ์ค์ ๋๋ค.
-
์ปจํ ์ด๋ ์์ ๊ฐ์: ๋งต ์ด๊ธฐํ ๋ฑ์ ํ๊บผ๋ฒ์ ์ฒ๋ฆฌํ๋ ๋๋ ์์ ์ ์จ์ ์์ฑ๋๋ ์ฝ๋ ์์ ์ค์ ๋๋ค.
13. ๋ณ๋ ฌํ์ ๋๊ธฐํ (Parallelization and synchronization)
-
๋ณ๋ ฌ์ฑ ํ์ฉ (Exploit parallelism): ๋ฉํฐ ์ฝ์ด๋ฅผ ์ฐ๊ธฐ ์ํด ์์ ์ ๋๋๋, ๋ฐฐ์น ๋จ์ ์ฒ๋ฆฌ๋ฅผ ํตํด ๊ด๋ฆฌ ๋น์ฉ์ ๊ด๋ฆฌํฉ๋๋ค.
-
์ ๊ธ ํ๋ ๋ถ์ฐ (Amortize lock acquisition): ํ ๋ฒ์ ์ ๊ธ์ผ๋ก ์ฌ๋ฌ ์์ ์ ์ฒ๋ฆฌํ์ฌ ์ ๊ธ ํ๋ ํ์ ์์ฒด๋ฅผ ์ค์ ๋๋ค.
-
์๊ณ ์์ญ ๋จ์ถ (Keep critical sections short): ์ ๊ธ์ ์ฅ ์ํ์์์ ์์ ์ ์ต์ํํ๊ณ ๋น์ผ ์ฐ์ฐ์ ์ ๊ธ ๋ฐ์์ ์ํํฉ๋๋ค.
-
์ค๋ฉ์ ํตํ ๊ฒฝํฉ ๊ฐ์: ํ๋์ ์ ๊ธ์ ์ฌ๋ฌ ์ค๋๋ก ๋๋์ด ์ค๋ ๋ ๊ฐ์ ์ถฉ๋ ๊ฐ๋ฅ์ฑ์ ๋ฎ์ถฅ๋๋ค.
-
SIMD ๋ช ๋ น์ด: ํ ๋ฒ์ ๋ช ๋ น์ผ๋ก ์ฌ๋ฌ ๋ฐ์ดํฐ๋ฅผ ๋์ ์ฒ๋ฆฌํ๋ CPU ๊ธฐ๋ฅ์ ์ ๊ทน ํ์ฉํฉ๋๋ค.
-
๊ฑฐ์ง ๊ณต์ (False Sharing) ๊ฐ์: ์ค๋ ๋๋ณ ๋ฐ์ดํฐ๋ฅผ ์๋ก ๋ค๋ฅธ ์บ์ ๋ผ์ธ์ ๋ฐฐ์นํ์ฌ ๋ถํ์ํ ์บ์ ๋๊ธฐํ๋ฅผ ๋ง์ต๋๋ค.
-
๋ฌธ๋งฅ ๊ตํ ๋น๋ ๊ฐ์: ์์ฃผ ์์ ์์ ์ ์ค๋ ๋ ํ์ ๋๊ธฐ์ง ๋ง๊ณ ํ์ฌ ์ค๋ ๋์์ ์ง์ ์ฒ๋ฆฌํฉ๋๋ค.
-
ํ์ดํ๋ผ์ด๋์ฉ ๋ฒํผ ์ฑ๋: ์ฑ๋์ ์ ์ ํ ๋ฒํผ๋ฅผ ๋์ด ์ก์์ ์ค๋ ๋๊ฐ ์๋ก ๊ธฐ๋ค๋ฆฌ๋ ์๊ฐ์ ์ค์ ๋๋ค.
-
๋ฝํ๋ฆฌ(Lock-free) ์ ๊ทผ: ๋ฎคํ ์ค ๋์ ์์์ ์ฐ์ฐ์ ์ฌ์ฉํ์ฌ ๋๊ธฐ ์๋ ๋ฐ์ดํฐ ๊ตฌ์กฐ๋ฅผ ๊ตฌํํฉ๋๋ค.
14. ํ๋กํ ์ฝ ๋ฒํผ ์กฐ์ธ (Protocol Buffer advice)
- ์ง๋ ฌํ ๋น์ฉ ์ต์ํ: ๋ถํ์ํ ์ค์ฒฉ ํํผ, 1~15๋ฒ ํ๋ ๋ฒํธ ์ฐ์ ์ฌ์ฉ, ์ ์ ํ ์ซ์ ํ์ ์ ํ,ย VIEW/CORDย ์ฌ์ฉ, ์๋ ๋ ํ์ฉ ๋ฑ์ผ๋ก ํ๋กํ ๋ฒํ ์ค๋ฒํค๋๋ฅผ ์ค์ ๋๋ค.
15. C++ ์ ์ฉ ์กฐ์ธ (C++-Specific advice)
- ์ต์ ํ๋ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํ์ฉ:ย flat_hash_map,ย InlinedVector,ย Status/StatusOrย ์ต์ ํ ๋ฑ C++ ์ธ์ด์ ๋ผ์ด๋ธ๋ฌ๋ฆฌ ํน์ฑ์ ๋ง๋ ๊ธฐ๋ฒ์ ์ ์ฉํฉ๋๋ค.
## Takeaways
-
ํ๋์จ์ด๋ ๊ฑฐ์ง๋งํ์ง ์๋๋ค: ์บ์ ๊ณ์ธต ๊ตฌ์กฐ์ ๋ฉ๋ชจ๋ฆฌ ์ ๊ทผ ๋น์ฉ์ ์ดํดํ๋ ๊ฒ์ด ์ฑ๋ฅ ํ๋์ ์์์ ๋๋ค.
-
๋์์ธ์ด ์ฑ๋ฅ์ด๋ค: ํจ์จ์ ์ธ API์ ๋ฐ์ดํฐ ๋ ์ด์์ ์ค๊ณ๋ ๋์ค์ ์ฝ๋๋ฅผ ์ต์ ํํ๋ ๊ฒ๋ณด๋ค ํจ์ฌ ๊ฐ๋ ฅํฉ๋๋ค.
-
์์ ์ฐจ์ด๊ฐ ๋ชจ์ฌ ํฐ ์ฐจ์ด๋ฅผ ๋ง๋ ๋ค: 1%์ ๊ฐ์ ์ ๋ฌด์ํ์ง ๋ง์ธ์. ๊ทธ๋ฐ ๊ฐ์ ๋ค์ด ์์ฌ ๋๊ท๋ชจ ์์คํ ์ ์์ ์ฑ์ ๊ฒฐ์ ํฉ๋๋ค.
-
๊ฐ์ค์ ์ธก์ ์ผ๋ก ์ฆ๋ช ํ๋ผ: ์ง๊ด์๋ง ์์กดํ์ง ๋ง๊ณ ํ๋กํ์ผ๋ฌ๋ฅผ ํตํด ์ค์ ์ด๋์ ๋ฆฌ์์ค๊ฐ ์๊ณ ์๋์ง ํ์ธํ์ธ์.
Reference
Jeffrey Dean & Sanjay Ghemawat, Performance Hints, 2025
Further reading
- Optimizing software in C++ย by Agner Fog. Describes many useful low-level techniques for improving performance.
- Understanding Software Dynamicsย by Richard L. Sites. Covers expert methods and advanced tools for diagnosing and fixing performance problems.
- Performance tips of the weekย - a collection of useful tips.
- Performance Mattersย - a collection of articles about performance.
- Daniel Lemireโs blogย - high performance implementations of interesting algorithms.
- Building Software Systems at Google and Lessons Learnedย - a video that describes system performance issues encountered at Google over a decade.
- Programming Pearlsย andย More Programming Pearls: Confessions of a Coderย by Jon Bentley. Essays on starting with algorithms and ending up with simple and efficient implementations.
- Hackerโs Delightย by Henry S. Warren. Bit-level and arithmetic algorithms for solving some common problems.
- Computer Architecture: A Quantitative Approachย by John L. Hennessy and David A. Patterson - Covers many aspects of computer architecture, including one that performance-minded software developers should be aware of like caches, branch predictors, TLBs, etc.