ΠΡΡΠΏΠ° ΠΈΠ·ΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΠΈ ΠΎΡ Π³Π΅ΡΠΌΠ°Π½ΡΠΊΠΈ ΡΠ½ΠΈΠ²Π΅ΡΡΠΈΡΠ΅ΡΠΈ
Rust Π²Π΅ΡΡΠΈΡΡΠ° Π½Π° Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° Π±Π΅ΡΠ΅ ΠΌΠ½ΠΎΠ³ΠΎ Π±Π»ΠΈΠ·ΠΊΠ° ΠΏΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π΄ΠΎ ΡΠ΅ΡΠ΅ΡΠ΅Π½ΡΠ½ΠΈΡ C Π΄ΡΠ°ΠΉΠ²Π΅Ρ. ΠΡΠΈ Π½Π°ΡΠΎΠ²Π°ΡΠ²Π°Π½Π΅ Ρ Π΅Π΄Π½ΠΎ ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅ Π½Π° Π±Π»ΠΎΠΊΠΎΠ²Π΅ ΠΎΡ 32 ΠΏΠ°ΠΊΠ΅ΡΠ° Π΄ΡΠ°ΠΉΠ²Π΅ΡΡΡ Π½Π° Rust ΠΈΠ·ΠΎΡΡΠ°Π²Π°ΡΠ΅ ΠΌΠ°Π»ΠΊΠΎ, Π½ΠΎ ΠΏΡΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ Ρ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ 32 ΠΏΠ°ΠΊΠ΅ΡΠ° Π½Π° Π±Π»ΠΎΠΊ ΡΠΎΠΉ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ Π½Π΅ ΡΠ΅ ΡΠ°Π·Π»ΠΈΡΠ°Π²Π°ΡΠ΅ ΠΏΠΎ ΡΠΊΠΎΡΠΎΡΡ ΠΎΡ C Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° ΠΈ Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π½Π° Π½ΠΈΠ²ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° 28 ΠΌΠΈΠ»ΠΈΠΎΠ½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° Π² ΡΠ΅ΠΊΡΠ½Π΄Π° Π½Π° ΡΡΡΠ²ΡΡ Ρ Xeon CPU E3-1230 v2 3.3 GHz.
Π‘Π»Π΅Π΄Π²Π°ΡΠ°ΡΠ° Π½ΠΈΡΠ° ΠΏΠΎ ΠΎΡΠ½ΠΎΡΠ΅Π½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Π±Π΅ΡΠ΅ Π·Π°Π΅ΡΠ° ΠΎΡ Go ΠΈ C# Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ Π° Π΄ΠΎΡΡΠ° Π±Π»ΠΈΠ·ΠΊΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ (Π΄ΡΠ°ΠΉΠ²Π΅ΡΡΡ Go ΡΠΏΠ΅ΡΠ΅Π»ΠΈ Π² ΡΠ΅ΡΡΠΎΠ²Π΅ Ρ Π±Π»ΠΎΠΊΠΎΠ²Π΅, Π²ΠΊΠ»ΡΡΠ²Π°ΡΠΈ Π΄ΠΎ 16 ΠΏΠ°ΠΊΠ΅ΡΠ°, ΠΈ Π·Π°ΠΏΠΎΡΠ½Π° Π»Π΅ΠΊΠΎ Π΄Π° Π³ΡΠ±ΠΈ Π² ΡΠ΅ΡΡΠΎΠ²Π΅ Ρ ΠΏΠΎΠ²Π΅ΡΠ΅ ΠΎΡ 16 ΠΏΠ°ΠΊΠ΅ΡΠ° Π² Π±Π»ΠΎΠΊ). Π‘ 256 ΠΏΠ°ΠΊΠ΅ΡΠ° Π½Π° Π±Π»ΠΎΠΊ, ΠΏΠΈΠΊΠΎΠ²Π°ΡΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡ Π·Π° Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ° C# Π±Π΅ΡΠ΅ ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ 28Mpps, Π° Π·Π° Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈΡΠ΅ Go ΠΏΡΠΈΠ±Π»ΠΈΠ·ΠΈΡΠ΅Π»Π½ΠΎ 25Mpps.
ΠΠ° ΡΠ»Π΅Π΄Π²Π°ΡΠΎ ΠΌΡΡΡΠΎ, Ρ Π΄ΠΎΡΡΠ° Π±Π»ΠΈΠ·ΠΊΠΈ ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈ, ΡΠ»Π΅Π΄Π²Π°Π½ ΠΎΡ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈ Π·Π°
Java, OCaml ΠΈ Haskell, ΠΊΠΎΠΈΡΠΎ Π²Π΅ΡΠ΅ Π±ΡΡ
Π° Π·Π°Π±Π΅Π»Π΅ΠΆΠΈΠΌΠΎ Π·Π°Π΄ ΡΠ°Π·Π³Π»Π΅ΠΆΠ΄Π°Π½ΠΈΡΠ΅ ΠΏΠΎ-ΡΠ°Π½ΠΎ ΠΎΠΏΡΠΈΠΈ ΠΈ Π½Π΅ ΠΌΠΎΠΆΠ°Ρ
Π° Π΄Π° ΠΏΡΠ΅ΠΎΠ΄ΠΎΠ»Π΅ΡΡ Π»Π΅Π½ΡΠ°ΡΠ° ΠΎΡ 12 ΠΌΠΈΠ»ΠΈΠΎΠ½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° Π² ΡΠ΅ΠΊΡΠ½Π΄Π°. ΠΡΠ°ΠΉΠ²Π΅ΡΠΈΡΠ΅, Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° Swift ΠΈ JavaScript, ΠΏΠΎΠΊΠ°Π·Π°Ρ
Π° ΠΎΡΠ΅ ΠΏΠΎ-Π³ΠΎΠ»ΡΠΌΠΎ ΠΈΠ·ΠΎΡΡΠ°Π²Π°Π½Π΅, ΠΊΠΎΠΈΡΠΎ ΡΡΠΏΡΡ
Π° Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠ²Π°Ρ ΠΏΠΎΡΠΎΡΠΈ Π½Π° Π½ΠΈΠ²ΠΎ ΠΎΡ 5 ΠΌΠΈΠ»ΠΈΠΎΠ½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° Π² ΡΠ΅ΠΊΡΠ½Π΄Π°.
ΠΡΠ°ΠΉΠ²Π΅ΡΡΡ Π½Π° Π΅Π·ΠΈΠΊΠ° Python Π·Π°ΡΠ²ΠΎΡΠΈ ΡΠ΅ΠΉΡΠΈΠ½Π³Π°, ΠΊΠΎΠΉΡΠΎ ΡΡΠΏΡ Π΄Π° ΠΎΠ±ΡΠ°Π±ΠΎΡΠΈ ΡΠ°ΠΌΠΎ 0.14 ΠΌΠΈΠ»ΠΈΠΎΠ½Π° ΠΏΠ°ΠΊΠ΅ΡΠ° Π² ΡΠ΅ΠΊΡΠ½Π΄Π°. ΠΠ·ΠΏΡΠ»Π½Π΅Π½ΠΈΠ΅ΡΠΎ Π½Π° Python Π±Π΅ΡΠ΅ ΠΈΠ·ΠΏΠΎΠ»Π·Π²Π°Π½ΠΎ Π·Π° ΠΎΡΠ΅Π½ΠΊΠ° Π½Π° ΡΠΊΠΎΡΠΎΡΡΡΠ° Π½Π° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΈΡΠ΅ Π±Π΅Π· JIT ΠΈ Π±Π΅Π· ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ½ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ (ΠΊΠΎΠ΄ΡΡ Π±Π΅ΡΠ΅ ΠΈΠ·ΠΏΡΠ»Π½Π΅Π½ Ρ ΠΏΠΎΠΌΠΎΡΡΠ° Π½Π° CPython 3.7 ΠΈ Π½Π΅ Π±Π΅ΡΠ΅ ΡΡΠ²ΠΌΠ΅ΡΡΠΈΠΌ Ρ PyPy, Π½ΠΎ ΡΠ΅ ΠΎΡΠ±Π΅Π»ΡΠ·Π²Π°, ΡΠ΅ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠ°Π½Π΅ΡΠΎ Π½Π° ΡΡΡΡΠΊΡΡΡΠΈΡΠ΅ ΠΎΡ Π΄Π°Π½Π½ΠΈ ΠΌΠΎΠΆΠ΅ Π΄Π° ΠΏΠΎΠ΄ΠΎΠ±ΡΠΈ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° Ρ ΠΎΠΊΠΎΠ»ΠΎ 10 ΠΏΡΡΠΈ).
ΠΡΠ²Π΅Π½ ΡΠΎΠ²Π° Π±ΡΡ
Π° ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈ ΡΠ΅ΡΡΠΎΠ²Π΅ Π·Π° Π»Π°ΡΠ΅Π½ΡΠ½ΠΎΡΡ, ΠΊΠΎΠΈΡΠΎ ΠΏΠΎΠΊΠ°Π·Π°Ρ
Π° Π΅ΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡΠ° Π½Π° Π±ΡΡΠ΅ΡΠΈΡΠ°Π½Π΅ΡΠΎ ΠΈ Π²ΡΠ·Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ΡΠΎ Π½Π° ΡΡΠ±ΠΈΡΠ°ΡΠ° Π½Π° ΠΎΡΠΏΠ°Π΄ΡΡΠΈ. Π’Π΅ΡΡΡΡ ΠΈΠ·ΠΌΠ΅ΡΠ²Π° Π»Π°ΡΠ΅Π½ΡΠ½ΠΎΡΡΡΠ°, ΡΠ»Π΅Π΄ ΠΊΠ°ΡΠΎ Π²ΡΠ΅ΠΊΠΈ ΠΏΠ°ΠΊΠ΅Ρ Π΅ ΠΏΡΠ΅Π½Π°ΡΠΎΡΠ΅Π½ ΠΎΡ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠ°, Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ Π²ΡΠ΅ΠΌΠ΅ Π·Π° ΠΈΠ·ΠΏΡΠ°ΡΠ°Π½Π΅. ΠΠΈΠ΄Π΅ΡΠΈΡΠ΅ Π²ΡΠ΅ ΠΎΡΠ΅ Π±ΡΡ
Π° Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈΡΠ΅ C ΠΈ Rust, ΡΠ΅Π·ΡΠ»ΡΠ°ΡΠΈΡΠ΅ ΠΎΡ ΠΊΠΎΠΈΡΠΎ Π±ΡΡ
Π° ΠΏΠΎΡΡΠΈ Π½Π΅ΡΠ°Π·Π»ΠΈΡΠΈΠΌΠΈ Π·Π° ΠΏΠΎΡΠΎΠΊ ΠΎΡ 1 ΠΌΠΈΠ»ΠΈΠΎΠ½ ΠΏΠ°ΠΊΠ΅ΡΠ° Π² ΡΠ΅ΠΊΡΠ½Π΄Π° (ΠΎΠΊΠΎΠ»ΠΎ 20 Β΅s). ΠΡΠ°ΠΉΠ²Π΅ΡΡΡ Π½Π° Π΅Π·ΠΈΠΊΠ° Go ΡΠ΅ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΠΈ Π΄ΠΎΠ±ΡΠ΅, ΠΊΠΎΠΉΡΠΎ Π±Π΅ΡΠ΅ ΡΠ°ΠΌΠΎ ΠΌΠ°Π»ΠΊΠΎ Π·Π°Π΄ Π»ΠΈΠ΄Π΅ΡΠΈΡΠ΅ ΠΈ ΡΡΡΠΎ ΡΠ΅ Π·Π°ΠΏΠ°Π·ΠΈ Π½Π° Π½ΠΈΠ²ΠΎ ΠΎΡ 20 Β΅s. C# Π΄ΡΠ°ΠΉΠ²Π΅ΡΡΡ ΠΏΠΎΠΊΠ°Π·Π° Π·Π°ΠΊΡΡΠ½Π΅Π½ΠΈΡ ΠΎΡ ΠΎΠΊΠΎΠ»ΠΎ 50 Β΅s.
ΠΡΠ°ΠΉΠ²Π΅ΡΠΈΡΠ΅, Π±Π°Π·ΠΈΡΠ°Π½ΠΈ Π½Π° JavaScript ΠΈ Java, ΠΏΠΎΠΊΠ°Π·Π²Π°Ρ Π½Π°ΠΉ-Π³ΠΎΠ»Π΅ΠΌΠΈ Π·Π°Π±Π°Π²ΡΠ½ΠΈΡ (Π·Π°ΠΊΡΡΠ½Π΅Π½ΠΈΡ Π½Π°Π΄ 300 Β΅s).
ΠΡΠΎΡΡΠ²Π°Π½Π΅ΡΠΎ Π΅ ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΎ, Π·Π° Π΄Π° ΡΠ΅ ΠΎΡΠ΅Π½ΠΈ Π²ΡΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠ° Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠ²Π°Π½Π΅ Π½Π° Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈ ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°ΡΠ° ΡΠΈΡΡΠ΅ΠΌΠ° Π½Π° Π΅Π·ΠΈΡΠΈ Π½Π° ΠΏΠΎ-Π²ΠΈΡΠΎΠΊΠΎ Π½ΠΈΠ²ΠΎ ΠΎΡ C. Π ΠΌΠΎΠΌΠ΅Π½ΡΠ° 39 ΠΎΡ 40 ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Ρ ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π½Π° Linux ΡΠ° ΡΠ²ΡΡΠ·Π°Π½ΠΈ Ρ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈ, ΡΠ°ΠΊΠ° ΡΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅ Ρ ΠΏΡΠΈΠ΅ΠΌΠ°Π½Π΅ΡΠΎ Π½Π° ΠΏΠΎ-Π±Π΅Π·ΠΎΠΏΠ°ΡΠ΅Π½ Π΅Π·ΠΈΠΊ ΠΈ ΠΏΡΠ΅ΠΌΠ΅ΡΡΠ²Π°Π½Π΅ΡΠΎ Π½Π° Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈ ΠΈΠ·Π²ΡΠ½ ΡΠ΄ΡΠΎΡΠΎ Π² ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»ΡΠΊΠΎΡΠΎ ΠΏΡΠΎΡΡΡΠ°Π½ΡΡΠ²ΠΎ
Π Ρ ΠΎΠ΄Π° Π½Π° ΠΈΠ·Π²ΡΡΡΠ΅Π½Π°ΡΠ° ΡΠ°Π±ΠΎΡΠ° Π±Π΅ΡΠ΅ Π·Π°ΠΊΠ»ΡΡΠ΅Π½ΠΎ, ΡΠ΅ Π΅Π·ΠΈΠΊΡΡ Rust Π΅ Π½Π°ΠΉ-Π΄ΠΎΠ±ΡΠΈΡΡ ΠΊΠ°Π½Π΄ΠΈΠ΄Π°Ρ Π·Π° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈ. Π€ΡΠ½ΠΊΡΠΈΠΈΡΠ΅, ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π΅Π½ΠΈ ΠΎΡ Rust, Π²ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ²Π°Ρ Π΄Π° ΡΠ΅ ΠΎΡΡΡΠ²Π΅ΡΠ΅ ΠΎΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠΈΡΠ΅, ΠΊΠΎΠΈΡΠΎ Π²ΡΠ·Π½ΠΈΠΊΠ²Π°Ρ ΠΏΠΎΡΠ°Π΄ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π½Π° ΠΏΠ°ΠΌΠ΅ΡΡΠ° Π½Π° Π½ΠΈΡΠΊΠΎ Π½ΠΈΠ²ΠΎ, Ρ ΡΠ΅Π½Π°ΡΠ° Π½Π° ΠΏΠΎΠ½ΠΈΠΆΠ°Π²Π°Π½Π΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π½ΠΎΡΡΡΠ° ΠΎΡ ΠΎΠΊΠΎΠ»ΠΎ 2%-10% Π² ΡΡΠ°Π²Π½Π΅Π½ΠΈΠ΅ Ρ Π΄ΡΠ°ΠΉΠ²Π΅ΡΠΈΡΠ΅ Π½Π° C-Π΅Π·ΠΈΠΊ. Π£ΡΡΠ°Π½ΠΎΠ²Π΅Π½ΠΎ Π΅ ΡΡΡΠΎ, ΡΠ΅ Go ΠΈ C# ΡΠ° ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΡΡΠΈ Π·Π° ΠΈΠ·Π³ΡΠ°ΠΆΠ΄Π°Π½Π΅ Π½Π° ΡΠΈΡΡΠ΅ΠΌΠ½ΠΈ ΠΊΠΎΠΌΠΏΠΎΠ½Π΅Π½ΡΠΈ Π² ΡΠΈΡΡΠ°ΡΠΈΠΈ, ΠΏΡΠΈ ΠΊΠΎΠΈΡΠΎ Π·Π°Π±Π°Π²ΡΠ½Π΅ΡΠΎ ΠΏΠΎΠ΄ ΠΌΠΈΠ»ΠΈΡΠ΅ΠΊΡΠ½Π΄ΠΈ, ΠΏΡΠΈΡΠΈΠ½Π΅Π½ΠΎ ΠΎΡ ΡΡΠ±ΠΈΡΠ°ΡΠ° Π½Π° ΠΎΡΠΏΠ°Π΄ΡΡΠΈ, Π΅ ΠΏΡΠΈΠ΅ΠΌΠ»ΠΈΠ²ΠΎ.
ΠΠ·ΡΠΎΡΠ½ΠΈΠΊ: opennet.ru