[Rust] Send์™€ Sync

Send์™€ Sync๋Š” Rust๊ฐ€ ์ง€ํ–ฅํ•˜๋Š” "์•ˆ์ „ํ•œ ๋™์‹œ์„ฑ ํ”„๋กœ๊ทธ๋ž˜๋ฐ"์˜ ๊ทผ๊ฐ„์„ ์ด๋ฃจ๋Š” trait์ด๋‹ค.

์‚ฌ์‹ค Send์™€ Sync์€ ์‹œ์Šคํ…œ์ ์œผ๋กœ ๋Œ€๋‹จํ•œ ๊ธฐ๋Šฅ์„ ํ•˜๋Š” ์š”์†Œ๋Š” ์•„๋‹ˆ๋‹ค. ์˜๋ฏธ๋ฅผ ๋ถ€์—ฌํ•˜๋Š” ์šฉ๋„์˜ ๋งˆ์ปค์ผ ๋ฟ์ด๋‹ค.

์ด 2๊ฐœ์˜ ํŠธ๋ ˆ์ž‡์ด ํŠน๋ณ„ํ•œ ์ ์€ ์ž๋™์œผ๋กœ ๊ตฌํ˜„์ด ๋œ๋‹ค๋Š” ๊ฒƒ์ด๋‹ค.
์˜ˆ๋ฅผ ๋“ค์–ด ์ƒˆ ๊ตฌ์กฐ์ฒด๋ฅผ ์ •์˜ํ•  ๊ฒฝ์šฐ, ๋‚ด๋ถ€ ํ•„๋“œ๋“ค์ด ์ „๋ถ€ Send๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ๋‹ค๋ฉด ๊ทธ ํƒ€์ž…์€ ์ž๋™์œผ๋กœ Send๊ฐ€ ๋œ๋‹ค. ํ•˜๋‚˜๋ผ๋„ Send๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š” ํƒ€์ž…์ด๋ผ๋ฉด Send๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š”๋‹ค.

Send์™€ Sync๋ฅผ ์ถฉ์กฑํ•˜์ง€ ์•Š๋Š” unsafeํ•œ ํƒ€์ž…์€ ํฌ์ธํ„ฐ ํƒ€์ž… ๋“ฑ์ด ์žˆ๋‹ค.




Send ํŠธ๋ ˆ์ž‡

Send ํŠธ๋ ˆ์ž‡์€ ์Šค๋ ˆ๋“œ ์ƒ์„ฑ์‹œ ํ•ด๋‹น ํƒ€์ž…์˜ ๊ฐ’์„ ์•ˆ์ „ํ•˜๊ฒŒ ์ด๋™์‹œํ‚ฌ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์˜๋ฏธํ•˜๋Š” ํŠธ๋ ˆ์ž‡์ด๋‹ค.
์˜ˆ๋ฅผ ๋“ค๋ฉด, ์ด๋Ÿฐ ์ƒํ™ฉ์ด๋‹ค.

move ํด๋กœ์ €๋ฅผ ํ†ตํ•ด ํด๋กœ์ € ๋ฐ–์˜ num ๋ณ€์ˆ˜๋ฅผ ์ด๋™์‹œ์ผœ์„œ ๊ฐ’์„ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ๋‹ค.
์ด๊ฒƒ์€ num์˜ ํƒ€์ž…์ธ i32๊ฐ€ Send๋ฅผ ๊ตฌํ˜„ํ•˜๊ณ  ์žˆ์–ด์„œ ๊ฐ€๋Šฅํ•œ ์ผ์ด๋‹ค.


๋งŒ์•ฝ ์•„๋ž˜์™€ ๊ฐ™์ด Send๋ฅผ ์œ„๋ฐ˜ํ•˜๋Š” ํƒ€์ž…์„ ์ •์˜ํ•œ๋‹ค๋ฉด


๋ฐ”๋กœ ์ฝ”๋“œ๊ฐ€ ๊นจ์งˆ ๊ฒƒ์ด๋‹ค.


์Šค๋ ˆ๋“œ ์•ˆ์ „์„ฑ์ด ์ง€์ผœ์ง€์ง€ ์•Š๋Š”๋‹ค๊ณ  ํ•œ๋‹ค.

์ด๊ฑธ ํ•ด๊ฒฐํ•˜๋Š” ๊ฐ€์žฅ ๋‹จ์ˆœ๋ฌด์‹ํ•œ ๋ฐฉ๋ฒ•์€, Send๋ฅผ ๊ฐ•์ œ๋กœ ๊ตฌํ˜„์‹œํ‚ค๋Š” ๊ฒƒ์ด๋‹ค.

์ด ํŠธ๋ ˆ์ž‡ ๊ตฌํ˜„ ์ž์ฒด๊ฐ€ ์–ด๋–ค ๊ฒฐ๊ณผ๋ฅผ ๋‚ณ์„์ง€ ์•Œ์ง€ ๋ชปํ•˜๊ธฐ ๋–„๋ฌธ์— unsafe๊ฐ€ ๋ถ™๋Š”๋‹ค.
๊ทธ๋ž˜์„œ ์ด ํƒ€์ž…์„ ๊ตฌํ˜„ํ•˜๋Š” ์‚ฌ๋žŒ์ด ๋ฐ˜๋“œ์‹œ safeํ•จ์„ ๋ณด์žฅํ•˜๋„๋ก ๊ตฌํ˜„์„ ํ•ด์•ผ ํ•œ๋‹ค.


๋ฌผ๋ก  ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์€ ์•ˆ์ „ํ•˜๊ฒŒ Send๊ฐ€ ๋˜๋„๋ก ๊ตฌํ˜„ํ•ด๋†“์€ ๊ธฐ์กด ํƒ€์ž…๋“ค์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์ด๋‹ค.

๋Œ€ํ‘œ์ ์œผ๋กœ ๋ ˆํผ๋Ÿฐ์Šค ์นด์šดํŒ… ํƒ€์ž…์ธ Arc๊ฐ€ Send๋ฅผ ์ถฉ์กฑํ•˜๋Š” ์•ˆ์ „ํ•œ ํƒ€์ž…์ด๋‹ค.
๋ฐ˜๋ฉด Rc๋Š” Send๋ฅผ ์ถฉ์กฑํ•˜์ง€ ์•Š๋Š”๋‹ค. Rc ์ž์ฒด๊ฐ€ thread-safeํ•˜์ง€ ์•Š๊ฒŒ ๊ตฌํ˜„๋˜์–ด์žˆ๊ธฐ ๋•Œ๋ฌธ์—, clone์€ ๋งˆ๊ตฌ ํ•  ์ˆ˜ ์žˆ๋”๋ผ๋„ ๊ทธ๊ฑธ ์Šค๋ ˆ๋“œ๋กœ ์ด๋™์‹œํ‚ค์ง€๋Š” ์•Š๋„๋ก ์ž ๊ธˆ์žฅ์น˜๋ฅผ ๋‘” ๊ฒƒ์ด๋‹ค.




Sync ํŠธ๋ ˆ์ž‡

Sync๋Š” ํ•ด๋‹น ํƒ€์ž…์ด ์Šค๋ ˆ๋“œ์— ์•ˆ์ „ํ•˜๊ฒŒ ์ฐธ์กฐ๋กœ ๊ณต์œ ๋  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ๋œปํ•˜๋Š” ํŠธ๋ ˆ์ž‡์ด๋‹ค. Send๊ฐ€ ๊ฐ’์ด ์Šค๋ ˆ๋“œ๋กœ ์˜ฎ๊ฒจ์งˆ ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์˜๋ฏธํ•œ๋‹ค๋ฉด, Sync๋Š” ์—ฌ๋Ÿฌ ์Šค๋ ˆ๋“œ์—์„œ ๋™์‹œ์— ๊ณต์œ ๋œ ์ฑ„๋กœ ์‚ฌ์šฉํ•  ์ˆ˜ ์žˆ๋Š”์ง€๋ฅผ ์˜๋ฏธํ•œ๋‹ค.

์กฐ๊ธˆ ํ—ท๊ฐˆ๋ฆด ์ˆ˜๋„ ์žˆ๋Š”๋ฐ, Arc ๊ฐ™์€ ํƒ€์ž…์— Sync๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š” ํƒ€์ž…์„ ๋„ฃ์–ด๋ณด๋ฉด ์ด๊ฒŒ ์–ด๋–ป๊ฒŒ ์‚ฌ์šฉ๋˜๋Š”์ง€ ์•Œ ์ˆ˜ ์žˆ๋‹ค. Cell์€ Send๋ฅผ ๊ตฌํ˜„ํ•˜์ง€๋งŒ Sync๋Š” ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š” ๋Œ€ํ‘œ์ ์ธ ํƒ€์ž…์ด๋‹ค.

Cell์ด Sync๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๋Š”๋‹ค๊ณ  ๋ถˆํ‰์„ ๋‚ด๋ฑ‰๋Š”๋‹ค.
Arc๋Š” ์–ผ๋งˆ๋“ ์ง€ clone์„ ํ†ตํ•ด ๋ณต์ œ๋  ์ˆ˜ ์žˆ๋Š”๋ฐ ๋ฐ˜ํ•ด, ์ •์ž‘ Cell์ด ๋ณต์ œ๋œ ์ƒํƒœ์—์„œ์˜ thread safetyํ•œ ๋™์ž‘์„ ๋ณด์žฅํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์— (Sync๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ธฐ ๋•Œ๋ฌธ์—) ๊ฒฝ๊ณ ๋ฅผ ๋‚ด๋ฑ‰๋Š” ์…ˆ์ธ ๊ฒƒ์ด๋‹ค.

Rust๋Š” ์ด๋Ÿฌํ•œ ์ œ์•ฝ์„ ํ†ตํ•ด thread์— ์•ˆ์ „ํ•œ ํƒ€์ž…๊ณผ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ํƒ€์ž…์„ ๋ถ„๋ฅ˜ํ•˜๊ณ  thread safety๋ฅผ ๋ณด์žฅํ•œ๋‹ค.




Send Sync ๊ฐ•์ œ๋กœ ์—†์• ๊ธฐ

ํ”ํ•œ ์ƒํ™ฉ์€ ์•„๋‹ˆ๊ฒ ์ง€๋งŒ, Send๋‚˜ Sync๋ฅผ ๊ตฌํ˜„ํ•˜์ง€ ์•Š๊ฒŒ ๋งŒ๋“ค ์ˆ˜๋„ ์žˆ๋‹ค.
๊ฐ€์žฅ ๊ฐ„ํŽธํ•œ ๋ฐฉ๋ฒ•์€ ๋น„์Šทํ•œ ๋งˆ์ปค ํƒ€์ž…์ธ ํŒฌํ…€ ๋ฐ์ดํ„ฐ๋กœ ์•ˆ์ „ํ•˜์ง€ ์•Š์€ ํƒ€์ž…์„ ๊ตฌ๊ฒจ๋„ฃ๋Š” ๊ฒƒ์ด๋‹ค.

์ด๋Ÿฌ๋ฉด Send์™€ Sync์— ๋Œ€ํ•œ ์ž๋™ ๊ตฌํ˜„์ด ๋ง‰ํ˜€๋ฒ„๋ฆฌ๊ณ 


์—๋Ÿฌ๊ฐ€ ๋ฐœ์ƒํ•œ๋‹ค.



์ฐธ์กฐ
https://doc.rust-lang.org/nomicon/send-and-sync.html
https://stackoverflow.com/questions/59428096/understanding-the-send-trait