[Go] Concurrency: sync.Pool
sync.Pool์ ๋๊ธฐํ ํจํค์ง์ ์์ง๋ง, ์ค์ง์ ์ธ ์ฌ์ฉ์ฒ๋ ์ฌ์ค ๋๊ธฐํ๋ณด๋จ GC ํ๋์ ์๋ค.
sync ํจํค์ง ๊ธฐ๋ฅ๋ค์ด ๋๋ถ๋ถ ๊ทธ๋ ์ง๋ง, ๋ฉํฐ ๊ณ ๋ฃจํด์์ ์ฌ์ฉํด๋ thread-safeํ ๊ธฐ๋ฅ ๋จ์๋ค.
๊ด๋ จ ํฌ์คํธ
https://blog.naver.com/sssang97/223232328524
Go์์ ํญ์ ์ต์ ํ์ ์์ ์ด ๋๋ ๊ฒ์ด GC๋ค. ๊ทธ๋ฆฌ๊ณ ์ฆ๊ณ ๋ฌด๊ฑฐ์ด ํ ๋น์ ๋ ๋๋ฆฐ GC์ ์์ธ์ด ๋๋ค.
sync.Pool์ ๋ฐ๋ณต์ ์ด๊ณ ๋ฌด๊ฑฐ์ด ์ด๊ธฐํ ์์
์ด ๋ฐ๋ณต๋ ๋, ํ ๋น ์ต์ํ์ ์ ์ฉํ ๊ธฐ๋ฅ์ด๋ค.
๋๋ต์ ์ธ ์ฌ์ฉ๋ฒ์ ์ด๋ ๋ค.
ํ์์ ์ด๊ธฐ๊ฐ์ ์ค์ ํ New ํจ์๋ฅผ ์ค๋ฒ๋ผ์ด๋ฉํด์ ์ ์, ๊ณต์ ๊ฐ ๊ฐ๋ฅํ ์์น์ ๋ณ์๋ก ๊น์๋๋ค.
Pool์์ ๊ฐ์ฒด๋ฅผ ๊ฐ์ ธ์ฌ ๋๋ Get ํจ์๋ก ๊ฐ์ ธ์จ๋ค. ์ด๋ ํ์ ๊ฐ์ฉ ๊ฐ์ฒด๊ฐ ์๋ค๋ฉด ์ ์ํ New ํจ์๋ก ๊ฐ์ฒด๋ฅผ ์ด๊ธฐํํด์ ๋ฐํํด์ค๋ค.
๊ทธ๋ฆฌ๊ณ ๊ฐ์ฒด๋ฅผ ๋ค ์ผ๋ค๋ฉด ๋ค์ Pool์ ๋ฐ๋ฉํด์ค๋ค.
๊ธฐ๋ณธ์ ์ธ ์ฌ์ฉ ์๋ฆฌ๋ ์ด์ ๋๋ค.
๊ทผ๋ฐ ์ด๊ฑธ ์ฐ๋ฉด ๋์ฒด ๋ญ๊ฐ ์ข์๊ฑธ๊น?
์ด๊ฑด ์ฌ์ค ๊ฐ๋ฒผ์ด ๋จ์ผ ํ์คํฌ์ ์์
์์๋ ํฐ ํจ์ฉ์ ๋ณด์ด์ง๋ ๋ชปํ๋ค.
์ด๊ฒ ์ฅ์ ์ ๋๋ฌ๋ด๋ ํ๊ฒฝ์ ๊ณ ๋ฃจํด์ด ๋์์ ๋๋ฉด์ ๊ฐ์ pool์์ ๋น์ทํ ๊ฐ์ฒด๋ฅผ ๊บผ๋ด์ธ๋๋ค.
์ฝ๋๋ก ๊ฐ๊ฒฐํ๊ฒ ํํํ๋ค๋ฉด ์ด๋ฐ ๋๋์ด๋ค.
์์ ๊ฐ์ด ํ์ ํตํด ๊บผ๋ด์ฐ๋ฉด ๋ชจ๋ ๊ณ ๋ฃจํด๋ง๋ค ๊ฐ๊ฐ์ ๊ฐ์ฒด๋ฅผ ์ ๋ถ ์์ฑํ ํ์๊ฐ ์๋ค.
ํ์ ์ฌ์ฉํ ์ ์๋ ๊ฐ์ฒด๊ฐ ์๋ค๋ฉด ๋ฐ๋ก ๊บผ๋ด์ธ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ์ผ์ข
์ ์บ์์ ๊ฐ๋
์ด๋ผ ๋ณด๋ฉด ๋๋ค.
๊ทธ๋์ ๊ฐ๊ฐ์ ์ด๊ธฐํ ์์ ์ด ๊ฝค ๋ฌด๊ฒ๋ค๋ฉด ๊ฝค ๊ด์ฐฎ์ ์ฑ๋ฅ ๊ฐ์ ์ ์ด ๋ ์ ์๋ค.
Pool์ ๊ตฌ์กฐ์ ์๋ฆฌ
pool์ ์ ํ์ฉํ๋ ค๋ฉด GC์์ ๊ด๊ณ์ฑ์ ๋ํด์๋ ์ด๋์ ๋ ์ดํด๋ฅผ ๊ฐ๊ณ ์์ด์ผ ํ๋ค. ๊ทธ๋ฅ ์ด๋ค๊ณ ๋ฌด์กฐ๊ฑด ๋นจ๋ผ์ง๋๊ฒ ์๋๊ธฐ ๋๋ฌธ์ด๋ค.
Pool ๊ตฌ์กฐ์ฒด๋ฅผ ๊น๋ณด๋ฉด ์ด๋ฐ ๊ตฌ์กฐ๋ฅผ ๊ฐ๊ณ ์๋ค.
Pool์ ํฌ๊ฒ 2๊ฐ์ ์์ญ์ผ๋ก ๊ตฌ์ฑ๋๋ค.
ํ๋๋ local ํ, ํ๋๋ victim ํ์ด๋ค.
์ผ๋ฐ์ ์ผ๋ก ์ค๋ธ์ ํธ๋ฅผ ์์ฑํด์ ์ด๊ธฐํํ ๋, ์ค๋ธ์ ํธ๋ค์ ๋ก์ปฌ ํ์ ์ ์ฌ๋๋ค. ์ฌ๊ธฐ๊น์ง๋ ๋ฌธ์ ๊ฐ ์๋ค.
golang ๋ฐํ์์ sync.Pool์ ๋ํด ์๋ ์๊ณ ๋ฆฌ์ฆ์ ํตํด ์ง์์ ์ผ๋ก ์์์ ํต์ ํ๋ค.
- GC ํ์์ด ๋๋ฉด go ๋ฐํ์์ ๋ด๋ถ์ ์ผ๋ก local ํ์ victim ํ๋ก ์ด๋์ํจ๋ค. (์ด๋ ๊ธฐ์กด victim ํ์ ์ ๊ฑฐ๋๋ค.)
- GC ํ์์ด ํ๋ฒ ๋ ๋๋ฉด local ํ์ ๋ victim ํ๋ก ๋ฐ์ด๋ด๊ณ , ๊ธฐ์กด victim ํ์ ์ ๊ฑฐํ๋ ๊ฒ์ ๋ฐ๋ณตํ๋ค.
์ถ์ฒ https://www.sobyte.net/post/2022-03/think-in-sync-pool/
์ด์ฐจํผ sync.Pool์ ์ค๋ธ์ ํธ๊ฐ ์์ผ๋ฉด ์๋ก ์์ฑ์ ํด์ ์ฃผ๊ธฐ ๋๋ฌธ์ ์ด ๋๋ฌธ์ ๋ฐ์ํ๋ ๊ธฐ๋ฅ์ ์ธ ๊ฒฐํจ์ ๋ณ๋ก ์๋ค. ์ฑ๋ฅ์ ์ธ ์ฌ์ด๋์ดํํธ๋ง์ ๋ฐ์์ํฌ ๋ฟ์ด๋ค.
๊ทผ๋ฐ ์ ๊ตณ์ด ์ง์ฐ๋๊ฑธ๊น? ์ด์ ๋ ๊ฐ๋จํ๋ค.
์ด๊ธฐํ๋ง ๋ฌดํ์ ํ๋ค๋ณด๋ฉด ์ค๋ธ์ ํธ๊ฐ ๋์์ด ์ ์ฌ๋๊ณ ๋ฉ๋ชจ๋ฆฌ๊ฐ ๋ฏธ์น๋ฏ์ด ์์ผ ์ ์๊ธฐ ๋๋ฌธ์ด๋ค. ๊ทธ๋์ GC๋ฅผ ์์ฒด์ ์ผ๋ก ์ ์ฉํ๋ ๊ฒ์ด๋ค.
์๋ฌดํผ ์ฌ๊ธฐ์ ์ค์ํ ์ ์, GC ํ์์ด ๋๋ฉด ๋๋ฉด ๊ธฐ์กด์ ํ ๋น๋ ์ค๋ธ์ ํธ๋ค์ ์ฆ๋ฐํ๋ค๋ ์ ์ด๋ค.
๊ทธ๋์ ์ค์ ๋ก ์ฑ๋ฅ์ด ํฅ์๋๋ ์ ๋๋ ๊ทธ ๋น๋์ ์ผ๋ง๋ ์ํฅ์ ๋ฐ๋์ง์ ๋ฐ๋ผ ๋ค๋ฅด๋ค.
์ด ๊ธฐ๋ฒ์ CPU ์บ์ ๊ตฌ์กฐ์์ ๊ณง์ ์ฌ์ฉํ๋ Victim cache ์๊ณ ๋ฆฌ์ฆ์์ ์ ๋ํ๋ค.
์ฐธ์กฐ
https://medium.com/swlh/go-the-idea-behind-sync-pool-32da5089df72
https://pkg.go.dev/sync#Pool
https://www.sobyte.net/post/2022-03/think-in-sync-pool/
https://en.wikipedia.org/wiki/Victim_cache