ΠΠ΅ΡΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·Π±ΠΎΡ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΡΠΎΡΡΠΎΠΉ Π°Π½Π°Π»ΠΈΠ· ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎΠΌΠΎΠ³ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ Π½Π΅ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΡΡΡ WebSocket ΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π°Π½Π½ΡΡ .
ΠΡΠΎΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π» Π²Π·ΡΡ ΠΈΠ· Π½Π°ΡΠ΅ΠΉ Π΅ΠΆΠ΅Π½Π΅Π΄Π΅Π»ΡΠ½ΠΎΠΉ email-ΡΠ°ΡΡΡΠ»ΠΊΠΈ, ΠΏΠΎΡΠ²ΡΡΠ΅Π½Π½ΠΎΠΉ Π±ΡΠΊΠ΅Π½Π΄Ρ. ΠΠΎΠ΄ΠΏΠΈΡΠΈΡΠ΅ΡΡ, ΡΡΠΎΠ±Ρ Π±ΡΡΡ Π² ΡΠΈΡΠ»Π΅ ΠΏΠ΅ΡΠ²ΡΡ , ΠΊΡΠΎ ΠΏΠΎΠ»ΡΡΠΈΡ Π΄Π°ΠΉΠ΄ΠΆΠ΅ΡΡ.
(function () { let link = document .getElementById ("d67f3832-ce99-42df-bbe1-cd8c56f727da-https://proglib.io/w/a358ac8b-2"); if (! link) return; let href = link .getAttribute ("href"); if (! href) return; let prefix = link .dataset .prefix; let action = link .dataset .action; link .addEventListener ("click", function (e) { let data = new FormData (); data .append ("url", href); apiFetch (action, { method: "POST", body: data }) .then (function (res) {}) .catch (function (err) { console .error (err); }); }) })();
IPC (ΠΌΠ΅ΠΆΠΏΡΠΎΡΠ΅ΡΡΠ½ΠΎΠ΅ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅) ΡΠ°ΡΡΠΎ Π½Π΅ ΡΡΠΈΡΡΠ²Π°Π΅ΡΡΡ ΠΏΡΠΈ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π·Π°ΡΡΠ°Ρ Π² ΠΎΠ±Π»Π°ΡΠ½ΡΡ ΡΡΠ΅Π΄Π°Ρ . ΠΠΎ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ, ΡΡΠΎ Π΅ΡΠ»ΠΈ Π²Ρ Π±ΡΠ΄Π΅ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ 1 Π’Π± Π²ΠΈΠ΄Π΅ΠΎ Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ Π½Π° ΠΎΠ±Π»Π°ΡΠ½ΠΎΠΌ ΡΠ΅ΡΠ²ΠΈΡΠ΅ ΡΠΈΠΏΠ° AWS, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΌ ΡΡΠ΅ΡΠ°ΠΌ: ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ Recall.ai ΠΎΠ±Π½Π°ΡΡΠΆΠΈΠ»Π°, ΡΡΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ WebSockets ΡΠ΅ΡΠ΅Π· loopback-ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠ»ΠΎΡΡ Π² Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ $1 ΠΌΠ»Π½ Π² Π³ΠΎΠ΄. ΠΠ»Ρ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΡ ΡΠ°ΡΡ ΠΎΠ΄ΠΎΠ² ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌ ΡΡΠΎΡΠ½ΠΎ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π½Π°ΠΉΡΠΈ Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΡΠΉ ΡΠΏΠΎΡΠΎΠ± ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ β Ρ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΠΎ Π²ΡΡΠΎΠΊΠΎΠΉ ΠΏΡΠΎΠΏΡΡΠΊΠ½ΠΎΠΉ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡΡ ΠΈ Π½ΠΈΠ·ΠΊΠΎΠΉ Π·Π°Π΄Π΅ΡΠΆΠΊΠΎΠΉ.
ΠΠ΅ΠΉΡ
ΠΠΎΠΌΠΏΠ°Π½ΠΈΡ Recall.ai ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ ΡΡΠ»ΡΠ³ΠΈ Π²ΠΈΠ΄Π΅ΠΎΠΏΠ΅ΡΠ΅ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΈ Π·Π°ΠΏΠΈΡΠΈ Π²ΡΡΡΠ΅Ρ. ΠΠ°Π³ΡΡΠ·ΠΊΠ° ΠΎΠ³ΡΠΎΠΌΠ½Π°Ρ: Π±ΠΎΡΠ°ΠΌΠΈ Recall.ai ΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ ΡΠΎΡΠ½ΠΈ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ, ΠΈΠ½ΡΡΠ°ΡΡΡΡΠΊΡΡΡΠ° ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΠΌΠΈΠ»Π»ΠΈΠΎΠ½Ρ Π²ΠΈΠ΄Π΅ΠΎΠΊΠΎΠ½ΡΠ΅ΡΠ΅Π½ΡΠΈΠΉ Π² ΠΌΠ΅ΡΡΡ. ΠΠ»Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π²ΠΈΠ΄Π΅ΠΎ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ CPU, Π° Π½Π΅ GPU, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΠΎΠ±Π»Π°ΡΠ½ΡΠ΅ ΠΏΡΠΎΠ²Π°ΠΉΠ΄Π΅ΡΡ (Π΄Π°ΠΆΠ΅ AWS) Π½Π΅ Π²ΡΠ΅Π³Π΄Π° ΠΌΠΎΠ³ΡΡ ΠΏΡΠ΅Π΄Π»ΠΎΠΆΠΈΡΡ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ GPU Π² Π½ΡΠΆΠ½ΡΡ ΠΌΠ°ΡΡΡΠ°Π±Π°Ρ . Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π²ΡΠ΅ Π·Π°Π΄Π°ΡΠΈ β ΠΎΡ Π·Π°ΠΏΡΡΠΊΠ° Π±ΡΠ°ΡΠ·Π΅ΡΠ° Π΄ΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π²ΠΈΠ΄Π΅ΠΎ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ β Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π° CPU. ΠΠ΅ΡΠ΅Π΄ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ ΠΏΠΎΡΡΠ°Π²ΠΈΠ»ΠΈ Π½Π΅ΠΏΡΠΎΡΡΡΡ ΡΠ΅Π»Ρ β ΡΠΎΠΊΡΠ°ΡΠΈΡΡ ΠΏΠΎΡΡΠ΅Π±Π»Π΅Π½ΠΈΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ² Π½Π° ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π±ΠΎΡΠ° Ρ 4 ΡΠ΄Π΅Ρ CPU Π΄ΠΎ 2, ΡΠ΅ΠΌ ΡΠ°ΠΌΡΠΌ ΡΠΌΠ΅Π½ΡΡΠΈΠ² ΡΡΠ΅ΡΠ° Π½Π° ΠΎΠ±Π»Π°ΡΠ½ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ Π²Π΄Π²ΠΎΠ΅. ΠΠ»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΡΠΎΠΉ ΡΠ΅Π»ΠΈ Π½ΡΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ:
- ΠΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ β ΠΏΡΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ, ΠΊΠ°ΠΊ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π±ΠΎΡΡ, ΠΈ Π²ΡΡΠ²ΠΈΡΡ ΡΠ°ΠΌΡΠ΅ ΡΠ΅ΡΡΡΡΠΎΠ΅ΠΌΠΊΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ.
- Π‘Π½ΠΈΠ·ΠΈΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ Π½Π° CPU Π±Π΅Π· ΡΡΠ΅ΡΠ±Π° Π΄Π»Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ.
ΠΠ΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΡΠ΅ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΡ
ΠΠΎ Π°Π½Π°Π»ΠΈΠ·Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ Π±ΠΎΡΠΎΠ² ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΠΎΠΆΠΈΠ΄Π°Π»ΠΈ, ΡΡΠΎ ΠΎΡΠ½ΠΎΠ²Π½Π°Ρ ΡΠ°ΡΡΡ ΡΠ΅ΡΡΡΡΠΎΠ² ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΡΡΠ°ΡΠΈΡΡΡ Π½Π° ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²ΠΈΠ΄Π΅ΠΎ: ΠΊΠ°ΠΊ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° Π²ΠΈΠ΄Π΅ΠΎ β ΠΎΡΠ΅Π½Ρ Π·Π°ΡΡΠ°ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΡΠΎΡΠΈΠ»ΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ ΠΏΠΎΠΊΠ°Π·Π°Π»ΠΎ ΡΠΎΠ²Π΅ΡΡΠ΅Π½Π½ΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ΅: Π±ΠΎΠ»ΡΡΠ°Ρ ΡΠ°ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΠΎΠ³ΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΡΡΠ°ΡΠΈΠ»oΡΡ Π½Π° ΡΡΠ½ΠΊΡΠΈΠΈ __memmove_avx_unaligned_erms ΠΈ __memcpy_avx_unaligned_erms. ΠΡΠΈ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΏΡΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅ C (glibc) ΠΈ ΠΎΡΠ²Π΅ΡΠ°ΡΡ Π·Π° Π±ΡΡΡΡΠΎΠ΅ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ. ΠΡΠ½ΠΎΠ²Π½ΡΠΌΠΈ Π²ΠΈΠ½ΠΎΠ²Π½ΠΈΠΊΠ°ΠΌΠΈ Π²ΡΠ·ΠΎΠ²ΠΎΠ² Π±ΡΠ»ΠΈ:
- ΠΠ»ΠΈΠ΅Π½Ρ WebSocket Π½Π° Python, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π» Π΄Π°Π½Π½ΡΠ΅.
- Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ WebSocket Π² Chromium, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ»Π° Π΄Π°Π½Π½ΡΠ΅.
ΠΠ½ΡΠΌΠΈ ΡΠ»ΠΎΠ²Π°ΠΌΠΈ, ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ° Π΄Π°Π½Π½ΡΡ ΡΠ΅ΡΠ΅Π· WebSocket ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΠ»Π° ΠΊ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠΌΡ ΡΠΈΡΠ»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π² ΠΏΠ°ΠΌΡΡΠΈ.
ΠΠΎΡΠ΅ΠΌΡ WebSocket ΠΎΠΊΠ°Π·Π°Π»ΡΡ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠΌ
Π§ΡΠΎΠ±Ρ ΠΏΠΎΠ½ΡΡΡ, ΠΏΠΎΡΠ΅ΠΌΡ WebSocket ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅Ρ ΡΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΡΡΡΠΎΠ² CPU, ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π½Π°ΡΠ°Π»ΠΈ Ρ Π°Π½Π°Π»ΠΈΠ·Π° ΡΠ²ΠΎΠ΅Π³ΠΎ ΠΏΠΎΠ΄Ρ ΠΎΠ΄Π°. ΠΡ ΡΠΈΡΡΠ΅ΠΌΠ° Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Ρ Π±Π΅Π·Π³ΠΎΠ»ΠΎΠ²ΡΠΌ Chromium, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅Ρ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡ Π΄Π»Ρ Π²ΠΈΠ΄Π΅ΠΎΠ·Π²ΠΎΠ½ΠΊΠΎΠ². ΠΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ WebSocket Π±ΡΠ» Π²ΡΠ±ΡΠ°Π½ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π΅ΠΊΠΎΠ΄ΠΈΡΠΎΠ²Π°Π½Π½ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π΅ΠΎ ΠΈΠ· Javascript-ΡΡΠ΅Π΄Ρ Π² ΡΠ½ΠΊΠΎΠ΄Π΅Ρ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΠΏΡΠΈΡΠΈΠ½Π°ΠΌ:
- Π‘ΠΊΠΎΡΠΎΡΡΡ β WebSocket Π±ΡΡΡΡΠ΅Π΅ Π±ΠΎΠ»ΡΡΠΈΠ½ΡΡΠ²Π° Π΄ΡΡΠ³ΠΈΡ Π²Π΅Π±-API.
- ΠΠΎΡΡΡΠΏΠ½ΠΎΡΡΡ β Π»Π΅Π³ΠΊΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π² ΡΡΠ΅Π΄Π΅ Javascript.
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π±ΠΈΠ½Π°ΡΠ½ΡΡ Π΄Π°Π½Π½ΡΡ β WebSocket ΠΌΠΎΠΆΠ΅Ρ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°ΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΡΡ, Π½ΠΎ ΠΈ Π΄Π²ΠΎΠΈΡΠ½ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅.
- ΠΠ½ΡΠ΅Π³ΡΠ°ΡΠΈΡ Π² Chromium, Π½Π΅ ΡΡΠ΅Π±ΡΡΡΠ°Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π·Π°Π²ΠΈΡΠΈΠΌΠΎΡΡΠ΅ΠΉ.
ΠΠ΄Π½Π°ΠΊΠΎ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ Π½Π΅ ΡΡΠ»ΠΈ ΠΎΠ΄ΠΈΠ½ Π½ΡΠ°Π½Ρ β ΠΎΠ³ΡΠΎΠΌΠ½ΡΠΉ ΠΎΠ±ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΡ . ΠΠ»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π²ΠΈΠ΄Π΅ΠΎΠΏΠΎΡΠΎΠΊΠ° Π² 1080p Ρ ΡΠ°ΡΡΠΎΡΠΎΠΉ 30 ΠΊΠ°Π΄ΡΠΎΠ² Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΎΠ±ΡΠ΅ΠΌ ΡΠΎΡΡΠ°Π²Π»ΡΠ» 1080 Γ 1920 Γ 1,5 Γ30 = 93,312 ΠΠ±/Ρ. Π‘ ΡΡΠ΅ΡΠΎΠΌ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΡΠΈΡΡΠ΅ΠΌΡ (p99 Π±ΠΎΡ, Ρ. Π΅. 99-ΠΉ ΠΏΠ΅ΡΡΠ΅Π½ΡΠΈΠ»Ρ Π½Π°Π³ΡΡΠ·ΠΊΠΈ), ΠΏΠΎΡΠΎΠΊ Π΄ΠΎΡΡΠΈΠ³Π°Π» 150 ΠΠ±/Ρ β ΠΈ Π²Π΅ΡΡ ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΌ ΠΏΠΎΡΡΠΎΡΠ½Π½ΠΎ ΠΏΠ΅ΡΠ΅Π΄Π°Π²Π°Π»ΡΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ.
Π‘ΡΠ°ΡΡΡ ΠΏΠΎ ΡΠ΅ΠΌΠ΅
ΠΡΠΈΡΠΈΠ½Ρ Π²ΡΡΠΎΠΊΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΈ Π½Π° WebSocket
ΠΠΎΡΠ»Π΅ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ ΡΡΠ°Π½Π΄Π°ΡΡΠΎΠ² WebSocket (RFC) ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π² Chromium, ΠΊΠΎΠΌΠ°Π½Π΄Π° Π½Π°ΡΠ»Π° Π΄Π²Π° ΠΊΠ»ΡΡΠ΅Π²ΡΡ ΡΠ°ΠΊΡΠΎΡΠ°, Π·Π°ΠΌΠ΅Π΄Π»ΡΡΡΠΈΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ Π΄Π°Π½Π½ΡΡ β ΠΈΠΌΠΈ ΠΎΠΊΠ°Π·Π°Π»ΠΈΡΡ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΈ ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅.
Π€ΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ
ΠΡΠΎ ΠΏΡΠΎΡΠ΅ΡΡ ΡΠ°Π·Π±ΠΈΠ²ΠΊΠΈ Π±ΠΎΠ»ΡΡΠΈΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π½Π° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ°ΡΡΠ΅ΠΉ (ΡΡΠ΅ΠΉΠΌΠΎΠ² WebSocket). Π€ΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΠΎΡΠΏΡΠ°Π²Π»ΡΡΡ Π΄Π°Π½Π½ΡΠ΅ ΡΠ°ΡΡΡΠΌΠΈ, Π΄Π°ΠΆΠ΅ Π΅ΡΠ»ΠΈ ΠΈΡ ΠΎΠ±ΡΠΈΠΉ ΡΠ°Π·ΠΌΠ΅Ρ Π·Π°ΡΠ°Π½Π΅Π΅ Π½Π΅ΠΈΠ·Π²Π΅ΡΡΠ΅Π½, ΠΈ ΠΏΠΎΠΌΠΎΠ³Π°Π΅Ρ Π² ΡΠ»ΡΡΠ°ΡΡ , ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½ΠΎ Π±ΠΎΠ»ΡΡΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π½Π΅ Π΄ΠΎΠ»ΠΆΠ½ΠΎ ΠΌΠΎΠ½ΠΎΠΏΠΎΠ»ΠΈΠ·ΠΈΡΠΎΠ²Π°ΡΡ ΠΊΠ°Π½Π°Π» ΡΠ²ΡΠ·ΠΈ. Π ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ WebSocket Π² Chromium Π»ΡΠ±ΠΎΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠ΅ Π±ΠΎΠ»ΡΡΠ΅ 131 ΠΠ± ΡΠ°Π·Π±ΠΈΠ²Π°Π΅ΡΡΡ Π½Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΠ΅ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΡ:
1080 Γ 1920 Γ 1,5 = 3110,4 ΠΠ± / 131 = 24 WebSocket-ΡΡΠ΅ΠΉΠΌΠ°.
Π’ΠΎ Π΅ΡΡΡ ΠΊΠ°ΠΆΠ΄ΡΠΉ ΠΊΠ°Π΄Ρ Π²ΠΈΠ΄Π΅ΠΎ ΡΠ°Π·Π±ΠΈΠ²Π°Π΅ΡΡΡ Π½Π° 24 ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°, ΠΈ ΠΏΡΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΠΈΠ· Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ Π»ΠΈΡΠ½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ β ΡΠΎΠ·Π΄Π°Π½ΠΈΠ΅ Π·Π°Π³ΠΎΠ»ΠΎΠ²ΠΊΠΎΠ², ΠΏΠ΅ΡΠ΅ΠΌΠ΅ΡΠ΅Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ Π² ΠΏΠ°ΠΌΡΡΠΈ ΠΈ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΡΠΎΠ΅Π΄ΠΈΠ½Π΅Π½ΠΈΠ΅ΠΌ.
ΠΠ°ΡΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅
ΠΠΎ ΡΠΏΠ΅ΡΠΈΡΠΈΠΊΠ°ΡΠΈΠΈ WebSocket, Π²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΠΌΡΠ΅ ΠΎΡ ΠΊΠ»ΠΈΠ΅Π½ΡΠ° ΠΊ ΡΠ΅ΡΠ²Π΅ΡΡ, Π΄ΠΎΠ»ΠΆΠ½Ρ Π±ΡΡΡ Π·Π°ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²Π°Π½Ρ. ΠΡΠΎ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π²Π΅Π΄Π΅Π½ΠΎ Π΄Π»Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ ΠΈ Π΄Π»Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Ρ ΡΠ΅ΡΠ΅Π²ΡΠΌΠΈ ΠΏΠΎΡΡΠ΅Π΄Π½ΠΈΠΊΠ°ΠΌΠΈ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΡΠΎΠΊΡΠΈ-ΡΠ΅ΡΠ²Π΅ΡΠ°ΠΌΠΈ). ΠΠ°ΡΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ:
- ΠΠ»ΠΈΠ΅Π½Ρ Π³Π΅Π½Π΅ΡΠΈΡΡΠ΅Ρ ΡΠ»ΡΡΠ°ΠΉΠ½ΡΠΉ 32-Π±ΠΈΡΠ½ΡΠΉ ΠΊΠ»ΡΡ ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
- ΠΠ°ΡΠ΅ΠΌ ΠΊΠ°ΠΆΠ΄ΡΠΉ Π±Π°ΠΉΡ ΠΈΡΡ ΠΎΠ΄Π½ΡΡ Π΄Π°Π½Π½ΡΡ XOR-ΠΈΡΡΡ Ρ ΡΡΠΈΠΌ ΠΊΠ»ΡΡΠΎΠΌ:
- ΠΠ°Π½Π½ΡΠ΅ ΡΠ°Π·Π±ΠΈΠ²Π°ΡΡΡΡ Π½Π° 32-Π±ΠΈΡΠ½ΡΠ΅ Π±Π»ΠΎΠΊΠΈ (4 Π±Π°ΠΉΡΠ°).
- ΠΠ°ΠΆΠ΄ΡΠΉ Π±Π»ΠΎΠΊ ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅ΡΡΡ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΠΊΠ»ΡΡΠ°.
- Π Π΅Π·ΡΠ»ΡΡΠ°Ρ ΡΡΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅ΡΡΡ Π½Π° ΡΠ΅ΡΠ²Π΅Ρ.
Π₯ΠΎΡΡ ΠΌΠ°ΡΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π²Π°ΠΆΠ½ΠΎ Π΄Π»Ρ Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΠΈ, ΠΎΠ½ΠΎ ΡΠΎΠ·Π΄Π°Π΅Ρ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ Π½Π° CPU β XOR-ΠΏΡΠΎΡ ΠΎΠ΄ΠΊΠ° ΠΏΠΎ Π²ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΠΌ Π½Π΅Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½Π° Π΄Π»Ρ ΠΎΠ±ΡΡΠ½ΡΡ Π²Π΅Π±-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π³Π΄Π΅ ΠΎΠ±ΡΠ΅ΠΌ Π΄Π°Π½Π½ΡΡ ΡΡΠ°Π²Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ, Π½ΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π±ΠΎΠ»ΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΌΠΎΠ² (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ, 100+ ΠΠ±/Ρ, ΠΊΠ°ΠΊ Π² ΡΠ»ΡΡΠ°Π΅ Ρ Π²ΠΈΠ΄Π΅ΠΎ) ΡΠ°ΠΊΠΈΠ΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΡΡΠ°Π½ΠΎΠ²ΡΡΡΡ Π·Π°ΠΌΠ΅ΡΠ½ΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΎΠΉ.
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° Π±ΠΎΠ»Π΅Π΅ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΠΏΠΎΡΠΎΠ±Π° ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ
ΠΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ ΠΊΠ°ΠΊ ΡΡΠ°Π»ΠΎ ΡΡΠ½ΠΎ, ΡΡΠΎ WebSocket Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ΅ΡΡΡΡΠΎΠ΅ΠΌΠΎΠΊ, ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ΅ΡΠΈΠ»Π° ΠΈΡΠΊΠ°ΡΡ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Ρ Π΄Π»Ρ ΠΈΠ·Π²Π»Π΅ΡΠ΅Π½ΠΈΡ Π΄Π°Π½Π½ΡΡ ΠΈΠ· Chromium. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ Π±ΡΠ°ΡΠ·Π΅ΡΠ½ΡΠ΅ API ΠΎΠΊΠ°Π·Π°Π»ΠΈΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠΌΠΈ Π΄Π»Ρ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΡΠ΅Π³ΠΎ-ΡΠΎ Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ, ΡΠ΅ΠΌ WebSocket. ΠΠΎΡΡΠΎΠΌΡ Π±ΡΠ»ΠΎ ΠΏΡΠΈΠ½ΡΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΡΠΎΡΠΊΠ½ΡΡΡ Chromium ΠΈ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΌΠ΅ΡΠΎΠ΄ ΠΎΠ±ΠΌΠ΅Π½Π° Π΄Π°Π½Π½ΡΠΌΠΈ. Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π±Π°Π·Ρ Π΄Π»Ρ ΡΡΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ°ΡΡΠΌΠΎΡΡΠ΅Π»Π° ΡΡΠΈ Π²Π°ΡΠΈΠ°Π½ΡΠ°: TCP/IP, ΡΠΎΠΊΠ΅ΡΡ Π΄ΠΎΠΌΠ΅Π½Π° Unix ΠΈ ΠΎΠ±ΡΡΡ ΠΏΠ°ΠΌΡΡΡ.
TCP/IP
ΠΠ»ΡΡΡ:
- ΠΠ±Ρ ΠΎΠ΄ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΠΉ WebSocket β Π΄Π°Π½Π½ΡΠ΅ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ Π½Π°ΠΏΡΡΠΌΡΡ ΡΠ΅ΡΠ΅Π· ΠΏΠ°ΠΊΠ΅ΡΠ½ΡΠΉ ΠΏΡΠΎΡΠΎΠΊΠΎΠ».
- ΠΠΈΠ·ΠΊΠ°Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΠ° β ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ loopback (Π²ΠΈΡΡΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠ΅ΡΠ΅Π²ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°) ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅Ρ Π²ΡΠ΅ΠΌΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ.
ΠΠΈΠ½ΡΡΡ:
- Π€ΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΡ ΠΏΠ°ΠΊΠ΅ΡΠΎΠ². ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΠΏΠ°ΠΊΠ΅ΡΠ° TCP/IP (MSS) Π½Π° ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ ΡΠ΅ΡΠΈ Ethernet β 1448 Π±Π°ΠΉΡ. ΠΡΠΎ Π·Π½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΠ° ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΊΠ°Π΄ΡΠ° Π²ΠΈΠ΄Π΅ΠΎ Π² 3 ΠΠ±. ΠΠ°ΠΆΠ΅ ΡΠ΅ΠΎΡΠ΅ΡΠΈΡΠ΅ΡΠΊΠΈΠΉ ΠΌΠ°ΠΊΡΠΈΠΌΡΠΌ TCP/IP β ΡΠ΅Π»ΡΡ 64 ΠΠ± β Π²ΡΠ΅ ΡΠ°Π²Π½ΠΎ Π½Π΅Π΄ΠΎΡΡΠ°ΡΠΎΡΠ΅Π½, ΡΡΠΎ ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ ΠΊ ΡΡΠ°Π³ΠΌΠ΅Π½ΡΠ°ΡΠΈΠΈ.
- ΠΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ . ΠΠ°ΠΊΠ΅ΡΡ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡΡΡ ΡΠ΅ΡΠ΅Π· ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΡΡΠ΅ΠΊ Linux, ΠΊΠΎΡΠΎΡΡΠΉ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ Π² kernel-space. ΠΠ°Π½Π½ΡΠ΅ Π½ΡΠΆΠ½ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°ΡΡ ΠΈΠ· user-space Π² kernel-space, ΡΡΠΎ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ, ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΠΏΡΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠ΅ Π±ΠΎΠ»ΡΡΠΈΡ ΠΎΠ±ΡΠ΅ΠΌΠΎΠ² Π΄Π°Π½Π½ΡΡ .
Π‘ΠΎΠΊΠ΅ΡΡ Π΄ΠΎΠΌΠ΅Π½Π° Unix
ΠΠ»ΡΡΡ:
- ΠΠΈΠ·ΠΊΠΈΠ΅ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΠ΅ ΡΠ°ΡΡ ΠΎΠ΄Ρ β IPC-ΡΠΎΠΊΠ΅ΡΡ Π±ΡΡΡΡΠ΅Π΅ TCP/IP, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ΠΈ ΠΎΠ±Ρ ΠΎΠ΄ΡΡ ΡΠ΅ΡΠ΅Π²ΠΎΠΉ ΡΡΠ΅ΠΊ.
- ΠΠ°ΡΠΈΠ²Π½Π°Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π² Linux. ΠΡΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ½Π°Ρ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ Π΄Π»Ρ IPC (Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ), ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°Π΅ΠΌΠ°Ρ Linux, Ρ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ°ΠΌΠΈ ΠΈ ΡΡΠ½ΠΊΡΠΈΡΠΌΠΈ Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ .
ΠΠΈΠ½ΡΡ:
- ΠΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΠ΅ Π΄Π°Π½Π½ΡΡ . ΠΠ°ΠΊ ΠΈ Π² ΡΠ»ΡΡΠ°Π΅ Ρ TCP/IP, Π΄Π°Π½Π½ΡΠ΅ ΠΊΠΎΠΏΠΈΡΡΡΡΡΡ ΠΈΠ· user-space Π² kernel-space ΠΈ ΠΎΠ±ΡΠ°ΡΠ½ΠΎ. ΠΠ»Ρ ΠΎΠ±ΡΠ΅ΠΌΠΎΠ² Π² 100+ ΠΠ±/Ρ ΡΡΠΎ Π²ΡΠ΅ Π΅ΡΠ΅ ΡΠ΅ΡΡΠ΅Π·Π½Π°Ρ Π½Π°Π³ΡΡΠ·ΠΊΠ°.
ΠΠ±ΡΠ°Ρ ΠΏΠ°ΠΌΡΡΡ (Shared Memory)
ΠΠ»ΡΡΡ:
- ΠΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½Π°Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ. ΠΠ±ΡΠ°Ρ ΠΏΠ°ΠΌΡΡΡ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ ΠΎΠ±ΡΠ°ΡΠ°ΡΡΡΡ ΠΊ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΈ ΡΠΎΠΌΡ ΠΆΠ΅ Π±Π»ΠΎΠΊΡ ΠΏΠ°ΠΌΡΡΠΈ. Chromium ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ Π² ΠΏΠ°ΠΌΡΡΡ, Π° Π²ΠΈΠ΄Π΅ΠΎΠΊΠΎΠ΄Π΅Ρ ΡΡΠΈΡΡΠ²Π°ΡΡ ΠΈΡ Π½Π°ΠΏΡΡΠΌΡΡ, Π±Π΅Π· ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
- ΠΡΡΡΡΡΡΠ²ΠΈΠ΅ Π½Π°ΠΊΠ»Π°Π΄Π½ΡΡ ΡΠ°ΡΡ ΠΎΠ΄ΠΎΠ² kernel-space. ΠΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΡΡ Π² user-space, ΡΡΠΎ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·ΠΈΡΡΠ΅Ρ Π·Π°Π΄Π΅ΡΠΆΠΊΠΈ ΠΈ Π½Π°Π³ΡΡΠ·ΠΊΡ.
ΠΠΈΠ½ΡΡΡ:
ΠΠ΅Ρ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°. Π ΠΎΡΠ»ΠΈΡΠΈΠ΅ ΠΎΡ TCP/IP ΠΈΠ»ΠΈ IPC-ΡΠΎΠΊΠ΅ΡΠΎΠ², Ρ ΠΎΠ±ΡΠ΅ΠΉ ΠΏΠ°ΠΌΡΡΠΈ Π½Π΅Ρ Π³ΠΎΡΠΎΠ²ΠΎΠ³ΠΎ ΡΡΠ°Π½Π΄Π°ΡΡΠ° Π΄Π»Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ . ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ:
- ΠΡΠΆΠ½ΠΎ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ Π²ΡΠ΅ Ρ Π½ΡΠ»Ρ.
- ΠΡΡΡ ΡΠΈΡΠΊ Π΄ΠΎΠΏΡΡΡΠΈΡΡ ΠΎΡΠΈΠ±ΠΊΠΈ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ.
- Π’ΡΠ΅Π±ΡΠ΅ΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΡΡΠΈΠ»ΠΈΠΉ Π½Π° ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΡ.
ΠΠ·Π²Π΅ΡΠΈΠ² Π²ΡΠ΅ ΠΏΠ»ΡΡΡ ΠΈ ΠΌΠΈΠ½ΡΡΡ, ΠΊΠΎΠΌΠ°Π½Π΄Π° ΠΏΡΠΈΡΠ»Π° ΠΊ Π²ΡΠ²ΠΎΠ΄Ρ, ΡΡΠΎ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΈΡ Π·Π°Π΄Π°ΡΠΈ ΠΎΠ±ΡΠ°Ρ ΠΏΠ°ΠΌΡΡΡ ΡΡΠ°Π½Π΅Ρ Π»ΡΡΡΠΈΠΌ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠΌ. Π₯ΠΎΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅ΡΠΎΠ΄Π° ΡΡΠ΅Π±ΠΎΠ²Π°Π»Π° ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠΈΠ»ΠΈΠΉ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎΡΡΡ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΡ ΡΠ°ΡΡ ΠΎΠ΄ΠΎΠ² ΡΡΠ°Π»Π° ΠΎΡΠ»ΠΈΡΠ½ΠΎΠΉ ΠΌΠΎΡΠΈΠ²Π°ΡΠΈΠ΅ΠΉ.
π» ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°
ΠΠΎΠ»ΡΡΠ΅ ΠΏΠΎΠ»Π΅Π·Π½ΡΡ ΠΌΠ°ΡΠ΅ΡΠΈΠ°Π»ΠΎΠ² Π²Ρ Π½Π°ΠΉΠ΄Π΅ΡΠ΅ Π½Π° Π½Π°ΡΠ΅ΠΌ ΡΠ΅Π»Π΅Π³ΡΠ°ΠΌ-ΠΊΠ°Π½Π°Π»Π΅ Β«ΠΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠΈΡΡΠ°Β»
ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΊΠΎΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ Π±ΡΡΠ΅ΡΠ° Π΄Π»Ρ ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ
ΠΠ»Ρ ΡΡΡΠ΅ΠΊΡΠΈΠ²Π½ΠΎΠ³ΠΎ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ Π΄Π°Π½Π½ΡΡ Π² ΠΎΠ±ΡΡΡ ΠΏΠ°ΠΌΡΡΡ ΠΊΠΎΠΌΠ°Π½Π΄Π° ΡΠ΅ΡΠΈΠ»Π° ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΊΠΎΠ»ΡΡΠ΅Π²ΠΎΠΉ Π±ΡΡΠ΅Ρ ΠΊΠ°ΠΊ ΠΎΡΠ½ΠΎΠ²Ρ ΡΡΠ°Π½ΡΠΏΠΎΡΡΠ½ΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ°. Π’ΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ Π±ΡΠ»ΠΈ ΡΠ°ΠΊΠΈΠΌΠΈ:
- ΠΠ΅Π· Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΎΠΊ β Π΄Π»Ρ ΠΌΠΈΠ½ΠΈΠΌΠΈΠ·Π°ΡΠΈΠΈ Π·Π°Π΄Π΅ΡΠΆΠ΅ΠΊ ΠΈ ΡΡΠ°Π±ΠΈΠ»ΡΠ½ΠΎΠΉ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π² ΡΠ΅Π°Π»ΡΠ½ΠΎΠΌ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. ΠΡΠ±Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΌΠΎΠ³Π»Π° Π±Ρ Π½Π°ΡΡΡΠΈΡΡ ΡΠ°Π±ΠΎΡΡ Π²ΠΈΠ΄Π΅ΠΎΠΏΠΎΡΠΎΠΊΠ°.
- ΠΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠ° Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»Π΅ΠΉ ΠΈ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΡΠ΅Π±ΠΈΡΠ΅Π»Ρ (MPSC). ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² Chromium Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡ Π°ΡΠ΄ΠΈΠΎ- ΠΈ Π²ΠΈΠ΄Π΅ΠΎΠ΄Π°Π½Π½ΡΠ΅ Π² Π±ΡΡΠ΅Ρ, Π° ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ ΠΌΠ΅Π΄ΠΈΠ°-ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅ΡΠ° ΠΎΠ±ΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ ΡΡΠΈ Π΄Π°Π½Π½ΡΠ΅.
- ΠΠΈΠ½Π°ΠΌΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΠ°Π·ΠΌΠ΅ΡΡ ΠΊΠ°Π΄ΡΠΎΠ². ΠΡΡΠ΅Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΡ Π²ΠΈΠ΄Π΅ΠΎΠΊΠ°Π΄ΡΠΎΠ² Ρ ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠ°Π·ΡΠ΅ΡΠ΅Π½ΠΈΡΠΌΠΈ.
- Π§ΡΠ΅Π½ΠΈΠ΅ Π±Π΅Π· ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ (zero-copy). ΠΠ΅Π΄ΠΈΠ°-ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΡΠΈΡΡΠ²Π°ΡΡ Π΄Π°Π½Π½ΡΠ΅ ΠΏΡΡΠΌΠΎ ΠΈΠ· Π±ΡΡΠ΅ΡΠ°, ΠΈΠ·Π±Π΅Π³Π°Ρ Π»ΠΈΡΠ½Π΅Π³ΠΎ ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ.
- Π‘ΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΡ Ρ ΠΏΠ΅ΡΠΎΡΠ½ΠΈΡΠ΅ΠΉ. ΠΠΎΡΠΎΠΊΠΈ Chromium, ΡΠ°Π±ΠΎΡΠ°ΡΡΠΈΠ΅ Π² ΠΏΠ΅ΡΠΎΡΠ½ΠΈΡΠ΅, Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΈΠΌΠ΅ΡΡ Π»Π΅Π³ΠΊΠΈΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ Π±ΡΡΠ΅ΡΡ.
- Π‘ΠΈΠ³Π½Π°Π»Ρ Ρ Π½ΠΈΠ·ΠΊΠΎΠΉ Π·Π°Π΄Π΅ΡΠΆΠΊΠΎΠΉ. ΠΡΡΠ΅Ρ Π΄ΠΎΠ»ΠΆΠ΅Π½ ΡΠ²Π΅Π΄ΠΎΠΌΠ»ΡΡΡ ΠΏΠΎΡΠΎΠΊΠΈ Chromium, ΠΊΠΎΠ³Π΄Π° Π΅ΡΡΡ ΡΠ²ΠΎΠ±ΠΎΠ΄Π½ΠΎΠ΅ ΠΌΠ΅ΡΡΠΎ, ΠΈ ΠΌΠ΅Π΄ΠΈΠ°-ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ Π½ΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅.
ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠ΅ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΊΠΎΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ Π±ΡΡΠ΅ΡΠ° Π½Π΅ ΠΏΠΎΠ΄Ρ ΠΎΠ΄ΠΈΠ»ΠΈ ΠΏΠΎΠ΄ ΡΠΏΠ΅ΡΠΈΡΠΈΡΠ΅ΡΠΊΠΈΠ΅ ΡΡΠ΅Π±ΠΎΠ²Π°Π½ΠΈΡ ΠΏΡΠΎΠ΅ΠΊΡΠ°, β ΠΏΡΠΈΡΠ»ΠΎΡΡ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°ΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ Π±ΡΡΠ΅Ρ.
ΠΠ°ΡΡΠΎΠΌΠ½ΡΠΉ ΠΊΠΎΠ»ΡΡΠ΅Π²ΠΎΠΉ Π±ΡΡΠ΅Ρ
Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠ΅ ΠΊΠΎΠ»ΡΡΠ΅Π²ΡΠ΅ Π±ΡΡΠ΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ Π΄Π²Π° ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ:
- write pointer (aΠ΄ΡΠ΅Ρ, ΠΊΡΠ΄Π° Π±ΡΠ΄ΡΡ Π·Π°ΠΏΠΈΡΡΠ²Π°ΡΡΡΡ Π½ΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅)
- read pointer (aΠ΄ΡΠ΅Ρ, Π³Π΄Π΅ Π΄Π°Π½Π½ΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠ΅ΡΠ΅Π·Π°ΠΏΠΈΡΠ°ΡΡ).
ΠΠ»Ρ ΠΏΠΎΠ΄Π΄Π΅ΡΠΆΠΊΠΈ ΡΡΠ΅Π½ΠΈΡ Π±Π΅Π· ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π±ΡΠ» Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΡΡΠ΅ΡΠΈΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ β peek pointer. ΠΡΠΎ Π°Π΄ΡΠ΅Ρ, Ρ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΌΠ΅Π΄ΠΈΠ°-ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ Π½Π°ΡΠΈΠ½Π°Π΅Ρ ΡΠΈΡΠ°ΡΡ ΠΊΠ°Π΄ΡΡ.
ΠΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ ΠΊΠ°ΡΡΠΎΠΌΠ½ΠΎΠΉ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±ΡΡΠ΅ΡΠ°:
- Π§ΡΠ΅Π½ΠΈΠ΅ Π±Π΅Π· ΠΊΠΎΠΏΠΈΡΠΎΠ²Π°Π½ΠΈΡ:
- ΠΠ΅Π΄ΠΈΠ°-ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ ΡΡΠΈΡΡΠ²Π°Π΅Ρ Π΄Π°Π½Π½ΡΠ΅ Ρ ΠΏΠΎΠΌΠΎΡΡΡ peek pointer.
- ΠΠ°Π½Π½ΡΠ΅ ΠΎΡΡΠ°ΡΡΡΡ Π²Π°Π»ΠΈΠ΄Π½ΡΠΌΠΈ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΎΠ½ΠΈ ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ Π½Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°Π½Ρ.
- Π’ΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ read pointer ΠΏΡΠΎΠ΄Π²ΠΈΠ³Π°Π΅ΡΡΡ Π²ΠΏΠ΅ΡΠ΅Π΄, ΡΡΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ ΠΌΠ΅ΡΡΠΎ Π² Π±ΡΡΠ΅ΡΠ΅.
- ΠΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡΡ β Π΄Π»Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΡ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Π΅ΠΉ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΡΡ Π°ΡΠΎΠΌΠ°ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ.
- Π‘Π΅ΠΌΠ°ΡΠΎΡΡ β Π΄Π»Ρ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ ΠΌΠ΅ΠΆΠ΄Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΡΠ΅ΠΌΠ°ΡΠΎΡ β Chromium ΡΠ²Π΅Π΄ΠΎΠΌΠ»ΡΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° Π·Π°ΠΏΠΈΡΠ°Π½Ρ Π½ΠΎΠ²ΡΠ΅ Π΄Π°Π½Π½ΡΠ΅, Π° ΠΌΠ΅Π΄ΠΈΠ°-ΠΊΠΎΠ½Π²Π΅ΠΉΠ΅Ρ ΡΠΈΠ³Π½Π°Π»ΠΈΠ·ΠΈΡΡΠ΅Ρ, ΠΊΠΎΠ³Π΄Π° ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΠ»ΠΎΡΡ ΠΌΠ΅ΡΡΠΎ Π² Π±ΡΡΠ΅ΡΠ΅.
ΠΡΠΎΠ³ΠΈ
Π Π°Π·ΡΠ°Π±ΠΎΡΠΊΠ° ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎΠ³ΠΎ ΠΊΠΎΠ»ΡΡΠ΅Π²ΠΎΠ³ΠΎ Π±ΡΡΠ΅ΡΠ° ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΠ»Π° Π΄ΠΎΠ±ΠΈΡΡΡΡ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΈ ΡΠΌΠ΅Π½ΡΡΠ΅Π½ΠΈΠΈ Π·Π°ΡΡΠ°Ρ:
- ΠΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ CPU ΡΠ΄Π°Π»ΠΎΡΡ ΡΠ½ΠΈΠ·ΠΈΡΡ Π½Π° 50%.
- ΠΠ½Π°ΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΠ²ΡΡΠΈΠ»Π°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π±ΠΎΡΠΎΠ².
ΠΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΡ ΠΏΡΠΈΠ²Π΅Π»Π° ΠΊ ΡΠ½ΠΈΠΆΠ΅Π½ΠΈΡ Π³ΠΎΠ΄ΠΎΠ²ΡΡ ΡΠ°ΡΡ ΠΎΠ΄ΠΎΠ² Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π½Π° $1 ΠΌΠ»Π½.
***
ΠΡΡΡ Π»ΠΈ Ρ Π²Π°Ρ ΠΎΠΏΡΡ ΡΠ°Π±ΠΎΡΡ Ρ Π°Π»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠΌΠΈ ΠΌΠ΅ΡΠΎΠ΄Π°ΠΌΠΈ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΠΈ Π΄Π°Π½Π½ΡΡ ? ΠΠΎΠ΄Π΅Π»ΠΈΡΠ΅ΡΡ ΡΠ²ΠΎΠΈΠΌΠΈ Π½Π°Ρ ΠΎΠ΄ΠΊΠ°ΠΌΠΈ Π² ΠΊΠΎΠΌΠΌΠ΅Π½ΡΠ°ΡΠΈΡΡ !