10๊ฐœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋ฒ„์ „์˜ ๋„คํŠธ์›Œํฌ ๋“œ๋ผ์ด๋ฒ„ ์„ฑ๋Šฅ ๋น„๊ต

๋…์ผ ๋Œ€ํ•™์˜ ์—ฐ๊ตฌ์ž ๊ทธ๋ฃน ะพะฟัƒะฑะปะธะบะพะฒะฐะปะฐ ์—ฐ๊ตฌ ๊ฒฐ๊ณผ ์‹คํ—˜, ๊ทธ ๋™์•ˆ 10๊ธฐ๊ฐ€๋น„ํŠธ Intel Ixgbe(X10xx) ๋„คํŠธ์›Œํฌ ์นด๋“œ์šฉ ํ‘œ์ค€ ๋“œ๋ผ์ด๋ฒ„์˜ 5๊ฐœ ๋ฒ„์ „์ด ๋‹ค์–‘ํ•œ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด๋กœ ๊ฐœ๋ฐœ๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ๋“œ๋ผ์ด๋ฒ„๋Š” ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์—์„œ ์‹คํ–‰๋˜๋ฉฐ C, Rust, Go, C#, Java, OCaml, Haskell, Swift, JavaScript ๋ฐ Python์œผ๋กœ ๊ตฌํ˜„๋ฉ๋‹ˆ๋‹ค. ์ฝ”๋“œ๋ฅผ ์ž‘์„ฑํ•  ๋•Œ ๊ฐ ์–ธ์–ด์˜ ํŠน์„ฑ์„ ๊ณ ๋ คํ•˜์—ฌ ์ตœ์ƒ์˜ ์„ฑ๋Šฅ์„ ๋‹ฌ์„ฑํ•˜๋Š” ๋ฐ ์ค‘์ ์„ ๋‘์—ˆ์Šต๋‹ˆ๋‹ค. ๋ชจ๋“  ์˜ต์…˜์€ ๊ธฐ๋Šฅ๋ฉด์—์„œ ๋™์ผํ•˜๋ฉฐ ์•ฝ 1000์ค„์˜ ์ฝ”๋“œ๋กœ ๊ตฌ์„ฑ๋ฉ๋‹ˆ๋‹ค. ํ”„๋กœ์ ํŠธ ๊ฐœ๋ฐœ ํ™•์‚ฐ BSD ๋ผ์ด์„ผ์Šค์— ๋”ฐ๋ผ.

Rust ๋ฒ„์ „์˜ ๋“œ๋ผ์ด๋ฒ„๋Š” C ์–ธ์–ด์˜ ์ฐธ์กฐ ๋“œ๋ผ์ด๋ฒ„์™€ ์„ฑ๋Šฅ์ด ๋งค์šฐ ์œ ์‚ฌํ•œ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. 32๊ฐœ์˜ ํŒจํ‚ท์„ ๋™์‹œ์— ๋ธ”๋ก์œผ๋กœ ๋ณด๋‚ด๋Š” ๋ถ€ํ•˜์—์„œ๋Š” Rust ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์•ฝ๊ฐ„ ๋’ค์ฒ˜์กŒ์ง€๋งŒ, ๋ธ”๋ก๋‹น 32๊ฐœ ์ด์ƒ์˜ ํŒจํ‚ท์„ ํ…Œ์ŠคํŠธํ•œ ๊ฒฐ๊ณผ ์†๋„๋Š” C ๋“œ๋ผ์ด๋ฒ„์™€ ๊ฑฐ์˜ ์ฐจ์ด๊ฐ€ ์—†์—ˆ๊ณ  28๋งŒ ์ฒ˜๋ฆฌ ์ˆ˜์ค€์˜ ์„ฑ๋Šฅ์„ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค. Xeon CPU E3-1230 v2 3.3GHz๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ์„œ๋ฒ„์˜ ์ดˆ๋‹น ํŒจํ‚ท ์ˆ˜์ž…๋‹ˆ๋‹ค.

10๊ฐœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋ฒ„์ „์˜ ๋„คํŠธ์›Œํฌ ๋“œ๋ผ์ด๋ฒ„ ์„ฑ๋Šฅ ๋น„๊ต

์„ฑ๋Šฅ ์ธก๋ฉด์—์„œ ๋‹ค์Œ ํ‹ˆ์ƒˆ ์‹œ์žฅ์€ Go ๋ฐ C# ์–ธ์–ด์˜ ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์ฐจ์ง€ํ–ˆ๋Š”๋ฐ, ์ด๋Š” ์ƒ๋‹นํžˆ ์œ ์‚ฌํ•œ ๊ฒฐ๊ณผ๋ฅผ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค(Go ๋“œ๋ผ์ด๋ฒ„๋Š” ์ตœ๋Œ€ 16๊ฐœ ํŒจํ‚ท ๋ธ”๋ก ํ…Œ์ŠคํŠธ์—์„œ ์ด๊ฒผ๊ณ  16๊ฐœ ์ด์ƒ์˜ ํŒจํ‚ท ํ…Œ์ŠคํŠธ์—์„œ๋Š” ์•ฝ๊ฐ„ ์ง€๊ธฐ ์‹œ์ž‘ํ–ˆ์Šต๋‹ˆ๋‹ค). ๋ธ”๋ก์—์„œ). ๋ธ”๋ก๋‹น 256๊ฐœ์˜ ํŒจํ‚ท์„ ์‚ฌ์šฉํ•˜๋Š” ๊ฒฝ์šฐ C# ๋“œ๋ผ์ด๋ฒ„์˜ ์ตœ๋Œ€ ์„ฑ๋Šฅ์€ ์ดˆ๋‹น ์•ฝ 28๋งŒ ํŒจํ‚ท์ด์—ˆ๊ณ  Go ๋“œ๋ผ์ด๋ฒ„๋Š” ์ดˆ๋‹น ์•ฝ 25๋งŒ ํŒจํ‚ท์ด์—ˆ์Šต๋‹ˆ๋‹ค.

๋‹ค์Œ์œผ๋กœ ์ƒ๋‹นํžˆ ๊ฐ€๊นŒ์šด ๊ฒฐ๊ณผ๋ฅผ ์–ป์€ ๋“œ๋ผ์ด๋ฒ„๋Š” ๋‹ค์Œ๊ณผ ๊ฐ™์Šต๋‹ˆ๋‹ค.
Java, OCaml ๋ฐ Haskell์€ ์ด์ „์— ๊ณ ๋ คํ•œ ์˜ต์…˜๋ณด๋‹ค ์ด๋ฏธ ๋ˆˆ์— ๋„๊ฒŒ ๋’ค์ณ์ ธ ์žˆ์œผ๋ฉฐ ์ดˆ๋‹น 12๋งŒ ํŒจํ‚ท์„ ๊ทน๋ณตํ•˜์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. Swift ๋ฐ JavaScript ๋“œ๋ผ์ด๋ฒ„๋Š” ์ดˆ๋‹น 5๋งŒ ํŒจํ‚ท ์ˆ˜์ค€์˜ ์ŠคํŠธ๋ฆผ์„ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ์–ด ํ›จ์”ฌ ๋” ํฐ ์ง€์—ฐ์„ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.

0.14์œ„๋Š” ์ดˆ๋‹น 3.7๋งŒ ๊ฐœ์˜ ํŒจํ‚ท๋งŒ ์ฒ˜๋ฆฌํ•  ์ˆ˜ ์žˆ๋Š” Python ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ์ฐจ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค. Python ๊ตฌํ˜„์€ JIT ๋ฐ ํŠน์ • ์ตœ์ ํ™” ์—†์ด ์ธํ„ฐํ”„๋ฆฌํ„ฐ์˜ ์†๋„๋ฅผ ํ‰๊ฐ€ํ•˜๋Š” ๋ฐ ์‚ฌ์šฉ๋˜์—ˆ์Šต๋‹ˆ๋‹ค(์ฝ”๋“œ๋Š” CPython 10์„ ์‚ฌ์šฉํ•˜์—ฌ ์‹คํ–‰๋˜์—ˆ์œผ๋ฉฐ PyPy์™€ ํ˜ธํ™˜๋˜์ง€ ์•Š์•˜์ง€๋งŒ ๋ฐ์ดํ„ฐ ์ €์žฅ ๊ตฌ์กฐ์˜ ์ตœ์ ํ™”๋Š” ์„ฑ๋Šฅ์„ ์•ฝ XNUMX๋ฐฐ ํ–ฅ์ƒ์‹œํ‚ฌ ์ˆ˜ ์žˆ๋‹ค๋Š” ์ ์— ์ฃผ๋ชฉ) ).

๋˜ํ•œ ๋ฒ„ํผ๋ง์˜ ํšจ์œจ์„ฑ๊ณผ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘๊ธฐ์˜ ์˜ํ–ฅ์„ ๋ณด์—ฌ์ฃผ๊ธฐ ์œ„ํ•ด ๋Œ€๊ธฐ ์‹œ๊ฐ„ ํ…Œ์ŠคํŠธ๊ฐ€ ์ˆ˜ํ–‰๋˜์—ˆ์Šต๋‹ˆ๋‹ค. ํ…Œ์ŠคํŠธ์—์„œ๋Š” ๋“œ๋ผ์ด๋ฒ„๊ฐ€ ๊ฐ ํŒจํ‚ท์„ ์ „๋‹ฌํ•œ ํ›„์˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„์„ ํ•ด๋‹น ํŒจํ‚ท์ด ์ „์†ก๋œ ์ •ํ™•ํ•œ ์‹œ๊ฐ„๊ณผ ๋น„๊ตํ•˜์—ฌ ์ธก์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฆฌ๋”๋Š” ์—ฌ์ „ํžˆ C ๋ฐ Rust ๋“œ๋ผ์ด๋ฒ„์˜€์œผ๋ฉฐ ๊ทธ ๊ฒฐ๊ณผ๋Š” ์ดˆ๋‹น 1๋งŒ ํŒจํ‚ท(์•ฝ 20 ยตs)์˜ ํ๋ฆ„์— ๋Œ€ํ•ด ์‹ค์งˆ์ ์œผ๋กœ ๊ตฌ๋ณ„ํ•  ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. Go ๋“œ๋ผ์ด๋ฒ„๋Š” ์ข‹์€ ์„ฑ๋Šฅ์„ ๋ฐœํœ˜ํ•˜์—ฌ ๋ฆฌ๋”๋ณด๋‹ค ์•ฝ๊ฐ„ ๋’ค์ฒ˜์กŒ์œผ๋ฉฐ 20ฮผs ์ˆ˜์ค€์„ ์œ ์ง€ํ–ˆ์Šต๋‹ˆ๋‹ค. C# ๋“œ๋ผ์ด๋ฒ„๋Š” ์•ฝ 50ฮผs์˜ ์ง€์—ฐ์„ ๋ณด์—ฌ์ฃผ์—ˆ์Šต๋‹ˆ๋‹ค.
๊ฐ€์žฅ ๊ธด ์ง€์—ฐ ์‹œ๊ฐ„์€ JavaScript ๋ฐ Java ๋“œ๋ผ์ด๋ฒ„์—์„œ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค(300ฮผs ์ด์ƒ์˜ ์ง€์—ฐ ์‹œ๊ฐ„).

10๊ฐœ ํ”„๋กœ๊ทธ๋ž˜๋ฐ ์–ธ์–ด ๋ฒ„์ „์˜ ๋„คํŠธ์›Œํฌ ๋“œ๋ผ์ด๋ฒ„ ์„ฑ๋Šฅ ๋น„๊ต

์ด๋ฒˆ ์—ฐ๊ตฌ๋Š” C๋ณด๋‹ค ์ƒ์œ„ ์–ธ์–ด๋กœ ๋“œ๋ผ์ด๋ฒ„์™€ ์šด์˜์ฒด์ œ ๊ตฌ์„ฑ์š”์†Œ๋ฅผ ๊ฐœ๋ฐœํ•  ์ˆ˜ ์žˆ๋Š” ๊ฐ€๋Šฅ์„ฑ์„ ํ‰๊ฐ€ํ•˜๊ธฐ ์œ„ํ•ด ์ง„ํ–‰๋๋‹ค. ํ˜„์žฌ Linux์˜ ๋ฉ”๋ชจ๋ฆฌ ๋ฌธ์ œ 39๊ฐœ ์ค‘ 40๊ฐœ๋Š” ๋“œ๋ผ์ด๋ฒ„์™€ ๊ด€๋ จ๋˜์–ด ์žˆ์œผ๋ฏ€๋กœ ๋ณด๋‹ค ์•ˆ์ „ํ•œ ์–ธ์–ด๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ๋“œ๋ผ์ด๋ฒ„๋ฅผ ์ปค๋„์—์„œ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์œผ๋กœ ์ด๋™ํ•˜๋Š” ๋ฌธ์ œ๋Š” ๊ด€๋ จ์„ฑ์„ ์œ ์ง€ํ•˜๋‹ค ์ œ์กฐ์—…์ฒด๋Š” ์ด๋ฏธ ์ด ๋ฐฉํ–ฅ์œผ๋กœ ์ ๊ทน์ ์œผ๋กœ ์‹คํ—˜ํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด Google์€ OS์šฉ TCP ์Šคํƒ์„ ๊ฐœ๋ฐœํ–ˆ์Šต๋‹ˆ๋‹ค. ํ‘น์ƒค Go ์–ธ์–ด๋กœ CloudFlare ํšŒ์‚ฌ ๋งŒ๋“ค์–ด์ง„ Rust์—์„œ QUIC ํ”„๋กœํ† ์ฝœ์„ ๊ตฌํ˜„ํ•˜๋ฉด์„œ Apple์€ ๋ชจ๋ฐ”์ผ ์žฅ์น˜์˜ TCP ์Šคํƒ์„ ์‚ฌ์šฉ์ž ๊ณต๊ฐ„์œผ๋กœ ์˜ฎ๊ฒผ์Šต๋‹ˆ๋‹ค.

์ž‘์—… ๊ณผ์ •์—์„œ Rust ์–ธ์–ด๊ฐ€ ๋“œ๋ผ์ด๋ฒ„ ๊ฐœ๋ฐœ์— ๊ฐ€์žฅ ์ ํ•ฉํ•œ ์–ธ์–ด๋ผ๋Š” ๊ฒฐ๋ก ์ด ๋‚˜์™”์Šต๋‹ˆ๋‹ค. Rust์˜ ๊ธฐ๋Šฅ์€ C ๋“œ๋ผ์ด๋ฒ„์— ๋น„ํ•ด ์•ฝ 2%~10%์˜ ์„ฑ๋Šฅ ์†์‹ค์„ ๊ฐ์ˆ˜ํ•˜๋ฉด์„œ๋„ ๋‚ฎ์€ ์ˆ˜์ค€์˜ ๋ฉ”๋ชจ๋ฆฌ ๊ด€๋ฆฌ์™€ ๊ด€๋ จ๋œ ๋ฌธ์ œ๋ฅผ ์ œ๊ฑฐํ•ฉ๋‹ˆ๋‹ค. Go์™€ C#์€ ๊ฐ€๋น„์ง€ ์ˆ˜์ง‘์œผ๋กœ ์ธํ•œ ๋ฐ€๋ฆฌ์ดˆ ๋ฏธ๋งŒ์˜ ๋Œ€๊ธฐ ์‹œ๊ฐ„์ด ํ—ˆ์šฉ๋˜๋Š” ์ƒํ™ฉ์—์„œ ์‹œ์Šคํ…œ ๊ตฌ์„ฑ ์š”์†Œ๋ฅผ ์ƒ์„ฑํ•˜๋Š” ๋ฐ์—๋„ ์ ํ•ฉํ•œ ๊ฒƒ์œผ๋กœ ๊ฐ„์ฃผ๋ฉ๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : opennet.ru

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€