[Go] race detector

race detector๋Š” ๋™์‹œ์„ฑ ๋ฌธ์ œ๋ฅผ ํƒ์ง€ํ•˜๊ธฐ ์œ„ํ•œ ๋‚ด์žฅ ๋ณด์กฐ๋„๊ตฌ๋‹ค.
go๋Š” ๋ง๋งŒ ๋™์‹œ์„ฑ ์–ธ์–ด์ง€, ์œ„ํ—˜ํ•œ ํ˜•ํƒœ์˜ ๋™์‹œ์„ฑ ์ฝ”๋“œ๋ฅผ ์‰ฝ๊ฒŒ ์ž‘์„ฑํ•  ์ˆ˜ ์žˆ๊ฒŒ ํ•ด์ฃผ๊ธฐ ๋•Œ๋ฌธ์— ์–ด์ฉ” ์ˆ˜ ์—†์ด ์จ์•ผํ•œ๋‹ค.

์ด๊ฑด static checker๊ฐ€ ์•„๋‹ˆ๋ผ ์‹ค์ œ๋กœ ํ”„๋กœ๊ทธ๋žจ์— ๋‚ด์žฅ๋ผ์„œ ๋Ÿฐํƒ€์ž„์— ๊ฒ€์‚ฌ๋ฅผ ํ•œ๋‹ค.
์œ„ํ—˜ํ•œ ๋™์‹œ์„ฑ ์ ‘๊ทผ์ด ๋ฐœ์ƒํ•  ๊ฒฝ์šฐ ๊ทธ๊ฑธ ๋กœ๊ทธ๋กœ ์ฐ๋Š” ์ •๋„์˜ ์—ญํ• ๋งŒ ํ•œ๋‹ค.




์‚ฌ์šฉ๋ฒ•

ํ”Œ๋žซํผ์— ๋”ฐ๋ผ CGO ์ข…์†์„ฑ์ด ์กด์žฌํ•œ๋‹ค. ์ผœ์ค˜์•ผ ํ•œ๋‹ค.


๊ทธ๋ฆฌ๊ณ  ๋นŒ๋“œํ• ๋•Œ -race ์˜ต์…˜์„ ๋„ฃ์œผ๋ฉด ์ผœ์ง„๋‹ค.

๊ทธ๋Ÿฌ๋ฉด ๋ญ”๊ฐ€ ๊ผฌ๋กฌํ•œ ์ฝ”๋“œ์— ํ”„๋กœ๊ทธ๋žจ์ด ์ ‘๊ทผํ•  ๋–„๋งˆ๋‹ค

์ด๋Ÿฐ ์‹์œผ๋กœ ์ŠคํƒํŠธ๋ ˆ์ด์Šค๋ฅผ ์ฐ์–ด์ค€๋‹ค.
panic์ด ๋‚ ๋งŒํ•œ ์œ„ํ—˜ํ•œ ์ฝ”๋“œ๋งŒ ์žก๋Š”๊ฑด ์•„๋‹ˆ๊ณ , slice๋‚˜ ์Šค์นผ๋ผ ๋ณ€์ˆ˜์— ์ ‘๊ทผํ•˜๋Š” ๊ฒƒ๋“ค๋„ ์›Œ๋‹์„ ๋„์šด๋‹ค.

๊ทผ๋ฐ ์ด๊ฑฐ ๋Œ๋ฆฌ๋‹ค๋ณด๋ฉด ๋‚ด ์ฝ”๋“œ๋ณด๋‹ค ์„œ๋“œํŒŒํ‹ฐ ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ ๋‚ด๋ถ€์—์„œ ์›Œ๋‹์ด ๋œฐ ๋•Œ๊ฐ€ ๋” ๋งŽ๋”๋ผ.
Go ์—์ฝ”์‹œ์Šคํ…œ์ด ๊ธ€๋Ÿฌ๋จน์€ ๊ฒƒ์ธ๊ฐ€? ์ด ๋„๊ตฌ๊ฐ€ ๋ฌธ์ œ์ธ ๊ฒƒ์ธ๊ฐ€?




๋ถ€์ž‘์šฉ

์„ฑ๋Šฅ ๋ถ€ํ•˜๊ฐ€ ๋”์ฐํ•˜๊ฒŒ ์‹ฌํ•˜๊ธฐ ๋•Œ๋ฌธ์— ํ”„๋กœ๋•์…˜ ์‹œ์Šคํ…œ์— ์‹ฌ๋Š”๋‹ค๋ฉด ๊ณ ๋ฏผ์„ ์ข€ ํ•ด๋ด์•ผ ํ•œ๋‹ค. ๋‚ด ๊ฒฝ์šฐ์—๋Š” ํ”„๋กœ๋•์…˜์—์„œ๋‚˜ ์œ ์˜๋ฏธํ•œ ๋ฌธ์ œ ์žฌํ˜„์ด ๊ฐ€๋Šฅํ•ด์„œ ํ”„๋กœ๋•์…˜์— ์˜ฌ๋ฆฌ๊ณ  ์ŠคํŽ™๋„ ํ•จ๊ป˜ ์ข€ ์˜ฌ๋ ธ๋‹ค.

CPU, Memory๋ฅผ ๋ชจ๋‘ ์—„์ฒญ๋‚˜๊ฒŒ ์žก์•„๋จน๊ณ , CPU๋Š” 2๋ฐฐ๋‚˜ 2๋ฐฐ ์ด์ƒ, ๋ฉ”๋ชจ๋ฆฌ๋Š” 2-20๋ฐฐ๊นŒ์ง€ ์ ์œ ํ•  ์ˆ˜ ์žˆ๋‹ค.

๊ฒŒ๋‹ค๊ฐ€ ์˜ค๋žซ๋™์•ˆ ์‹คํ–‰๋˜๋Š” ๊ณ ๋ฃจํ‹ด์ด ์žˆ์„ ๊ฒฝ์šฐ ๋ฉ”๋ชจ๋ฆฌ๊ฐ€ append-only๋กœ ๋ˆ„์ˆ˜๋˜๋“ฏ ์Œ“์ด๋Š” ๋ฌธ์ œ๊ฐ€ ์žˆ๋‹ค.


๊ทผ๋ฐ ์ด๊ฑธ๋กœ ๋ฌธ์ œ๋ฅผ ์‰ฝ๊ฒŒ ์ฐพ์ง€๋Š” ๋ชปํ–ˆ๋‹ค.

์‚ฌ์‹ค ๊ฐ„ํ—์ ์œผ๋กœ ๋ฐœ์ƒํ•˜๋Š” concurrent map write ํŒจ๋‹‰ ์žก์œผ๋ ค๊ณ  ๋„ฃ์–ด๋ณธ๊ฑด๋ฐ, ๋ผ์ด๋ธŒ๋Ÿฌ๋ฆฌ์—์„œ๋งŒ ๋ฌด์˜๋ฏธํ•œ ๊ฒฝ๊ณ ๋งŒ ์ž”๋œฉ ๋œจ๊ณ  ์ง„์งœ ๋ฌธ์ œ๊ฐ€ ๋ ๋งŒํ•œ ๊ทผ์›์ง€๋Š” ์ „ํ˜€ ์ฐพ์ง€ ๋ชปํ–ˆ๋‹ค.



์ฐธ์กฐ
https://go.dev/doc/articles/race_detector