ΠΊΠ°ΠΊΠΈΠ΅ ΡΡΠ°ΡΡΠΊΠΈ ΠΊΠΎΠ΄Π° Π² python ΠΌΠΎΠ³ΡΡ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π±Π΅Π· gil
ΠΠ°ΡΠ΅ΠΌ Π½ΡΠΆΠ΅Π½ Python Global Interpreter Lock ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
ΠΠ²ΡΠΎΡΠΈΠ·ΡΠΉΡΠ΅ΡΡ
ΠΠ°ΡΠ΅ΠΌ Π½ΡΠΆΠ΅Π½ Python Global Interpreter Lock ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ
Python Global Interpreter Lock (GIL) β ΡΡΠΎ ΡΠ²ΠΎΠ΅ΠΎΠ±ΡΠ°Π·Π½Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ°, ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡΡΠ°Ρ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ ΡΠΏΡΠ°Π²Π»ΡΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ Python. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ.
Π Π°Π±ΠΎΡΠ° GIL ΠΌΠΎΠΆΠ΅Ρ ΠΊΠ°Π·Π°ΡΡΡΡ Π½Π΅ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΡΠΎΠ·Π΄Π°ΡΡΠΈΡ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΎ Π²ΠΎ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ ΠΎΡΡΡΡΡΡΠ²ΠΈΠ΅ GIL ΠΌΠΎΠΆΠ΅Ρ Π½Π΅Π³Π°ΡΠΈΠ²Π½ΠΎ ΡΠΊΠ°Π·ΡΠ²Π°ΡΡΡΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎ-Π·Π°Π²ΠΈΡΡΠΌΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ.
ΠΠΎΡΠΊΠΎΠ»ΡΠΊΡ GIL ΠΏΠΎΠ·Π²ΠΎΠ»ΡΠ΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ Π΄Π°ΠΆΠ΅ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ, ΠΎΠ½ Π·Π°ΡΠ°Π±ΠΎΡΠ°Π» ΡΠ΅ΠΏΡΡΠ°ΡΠΈΡ Β«ΠΏΠ΅ΡΠ°Π»ΡΠ½ΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎΠΉΒ» ΡΡΠ½ΠΊΡΠΈΠΈ.
Π ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠ΅ Π±ΡΠ΄Π΅Ρ ΡΠ°ΡΡΠΊΠ°Π·Π°Π½ΠΎ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ GIL Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΈ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ ΡΡΠΎ ΡΠ°ΠΌΠΎΠ΅ Π²Π»ΠΈΡΠ½ΠΈΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΌΡΠ³ΡΠΈΡΡ.
Π§ΡΠΎ Π·Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π² Python ΡΠ΅ΡΠ°Π΅Ρ GIL?
Python ΠΏΠΎΠ΄ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΡΡΠ»ΠΎΠΊ Π΄Π»Ρ ΠΊΠΎΡΡΠ΅ΠΊΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΡΡ. ΠΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠΎΠ·Π΄Π°Π½Π½ΡΠ΅ Π² Python ΠΎΠ±ΡΠ΅ΠΊΡΡ ΠΈΠΌΠ΅ΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΠ΄ΡΡΡΡΠ° ΡΡΡΠ»ΠΎΠΊ, Π² ΠΊΠΎΡΠΎΡΠΎΠΉ Ρ ΡΠ°Π½ΠΈΡΡΡ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ Π²ΡΠ΅Ρ ΡΡΡΠ»ΠΎΠΊ Π½Π° ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ. ΠΠ°ΠΊ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½Π°Ρ ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠ°Π²Π½ΠΎΠΉ Π½ΡΠ»Ρ, ΠΏΠ°ΠΌΡΡΡ, Π²ΡΠ΄Π΅Π»Π΅Π½Π½Π°Ρ ΠΏΠΎΠ΄ ΡΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ, ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅ΡΡΡ.
ΠΠΎΡ Π½Π΅Π±ΠΎΠ»ΡΡΠΎΠΉ ΠΏΡΠΈΠΌΠ΅Ρ ΠΊΠΎΠ΄Π°, Π΄Π΅ΠΌΠΎΠ½ΡΡΡΠΈΡΡΡΡΠΈΠΉ ΡΠ°Π±ΠΎΡΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΏΠΎΠ΄ΡΡΡΡΠ° ΡΡΡΠ»ΠΎΠΊ:
ΠΡΠΎΠ±Π»Π΅ΠΌΠ°, ΠΊΠΎΡΠΎΡΡΡ ΡΠ΅ΡΠ°Π΅Ρ GIL, ΡΠ²ΡΠ·Π°Π½Π° Ρ ΡΠ΅ΠΌ, ΡΡΠΎ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΌ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ ΡΡΠ°Π·Ρ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΌΠΎΠ³ΡΡ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°ΡΡ ΠΈΠ»ΠΈ ΡΠΌΠ΅Π½ΡΡΠ°ΡΡ Π·Π½Π°ΡΠ΅Π½ΠΈΡ ΡΡΠΎΠ³ΠΎ ΡΡΡΡΡΠΈΠΊΠ° ΡΡΡΠ»ΠΎΠΊ. ΠΡΠΎ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ ΠΏΠ°ΠΌΡΡΡ ΠΎΡΠΈΡΡΠΈΡΡΡ Π½Π΅ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ ΠΈ ΡΠ΄Π°Π»ΠΈΡΡΡ ΡΠΎΡ ΠΎΠ±ΡΠ΅ΠΊΡ, Π½Π° ΠΊΠΎΡΠΎΡΡΠΉ Π΅ΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΡΡΠ»ΠΊΠ°.
Π‘ΡΡΡΡΠΈΠΊ ΡΡΡΠ»ΠΎΠΊ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΡΠΈΡΠΈΡΡ, Π΄ΠΎΠ±Π°Π²ΠΈΠ² Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠΎΡΡ Π½Π° Π²ΡΠ΅ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΡΡΡΡ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΡΡΡΡΡΠΈΠΊ Π±ΡΠ΄Π΅Ρ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎ.
ΠΠΎ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΊ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ°ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΈΠ²Π΅ΡΡΠΈ ΠΊ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ β Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ (Π°Π½Π³Π». deadlocks), ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠ»ΡΡΠ°Π΅ΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° Π΅ΡΡΡ Π±ΠΎΠ»Π΅Π΅ ΡΠ΅ΠΌ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΎΠ±ΡΠ΅ΠΊΡΠ΅. Π ΡΠΎΠΌΡ ΠΆΠ΅ ΡΡΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠΎΠΆΠ΅ ΡΠ½ΠΈΠΆΠ°Π»Π° Π±Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈΠ·-Π·Π° ΠΌΠ½ΠΎΠ³ΠΎΠΊΡΠ°ΡΠ½ΠΎΠΉ ΡΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠΎΡΠΎΠ².
GIL β ΡΡΠ° ΠΎΠ΄ΠΈΠ½ΠΎΡΠ½ΡΠΉ Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠΎΡ ΡΠ°ΠΌΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° Python. ΠΠ½ Π΄ΠΎΠ±Π°Π²Π»ΡΠ΅Ρ ΠΏΡΠ°Π²ΠΈΠ»ΠΎ: Π»ΡΠ±ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±Π°ΠΉΡΠΊΠΎΠ΄Π° Π² Python ΡΡΠ΅Π±ΡΠ΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°. Π ΡΠ°ΠΊΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΊΠ»ΡΡΠΈΡΡ Π²Π·Π°ΠΈΠΌΠΎΠ±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ, Ρ. ΠΊ. GIL Π±ΡΠ΄Π΅Ρ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΠΎΠΉ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΎΠΉ Π² ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Π ΡΠΎΠΌΡ ΠΆΠ΅ Π΅Π³ΠΎ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΡΠΎΠ²ΡΠ΅ΠΌ Π½Π΅ ΠΊΡΠΈΡΠΈΡΠ½ΠΎ. ΠΠ΄Π½Π°ΠΊΠΎ ΡΡΠΎΠΈΡ ΠΏΠΎΠΌΠ½ΠΈΡΡ, ΡΡΠΎ GIL ΡΠ²Π΅ΡΠ΅Π½Π½ΠΎ Π΄Π΅Π»Π°Π΅Ρ Π»ΡΠ±ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ.
ΠΠ΅ΡΠΌΠΎΡΡΡ Π½Π° ΡΠΎ, ΡΡΠΎ GIL ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ ΠΈ Π² Π΄ΡΡΠ³ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°Ρ , Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ Π² Ruby, ΠΎΠ½ Π½Π΅ ΡΠ²Π»ΡΠ΅ΡΡΡ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΌ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ΠΌ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ. ΠΠ΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ·ΡΠΊΠΈ ΡΠ΅ΡΠ°ΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΠΈ Ρ ΠΏΠΎΠΌΠΎΡΡΡ ΡΠ±ΠΎΡΠΊΠΈ ΠΌΡΡΠΎΡΠ°.
Π‘ Π΄ΡΡΠ³ΠΎΠΉ ΡΡΠΎΡΠΎΠ½Ρ ΡΡΠΎ ΠΎΠ·Π½Π°ΡΠ°Π΅Ρ, ΡΡΠΎ ΡΠ°ΠΊΠΈΠ΅ ΡΠ·ΡΠΊΠΈ ΡΠ°ΡΡΠΎ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΊΠΎΠΌΠΏΠ΅Π½ΡΠΈΡΠΎΠ²Π°ΡΡ ΠΏΠΎΡΠ΅ΡΡ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ² GIL Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ΠΈΠ΅ΠΌ ΠΊΠ°ΠΊΠΈΡ -ΡΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ, Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡΠΎΡΠΎΠ².
ΠΠΎΡΠ΅ΠΌΡ Π΄Π»Ρ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Π±ΡΠ» Π²ΡΠ±ΡΠ°Π½ ΠΈΠΌΠ΅Π½Π½ΠΎ GIL?
ΠΡΠ°ΠΊ, ΠΏΠΎΡΠ΅ΠΌΡ ΠΆΠ΅ ΡΡΠΎ Π½Π΅ ΠΎΡΠ΅Π½Ρ Β«Ρ ΠΎΡΠΎΡΠ΅Π΅Β» ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π² Python? ΠΠ°ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄Π»Ρ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΡΡΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΊΡΠΈΡΠΈΡΠ½ΠΎ?
ΠΠΎ ΡΠ»ΠΎΠ²Π°ΠΌ Larry Hastings, Π°ΡΡ ΠΈΡΠ΅ΠΊΡΡΡΠ½ΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ GIL β ΡΡΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· ΡΠ΅Ρ Π²Π΅ΡΠ΅ΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ΄Π΅Π»Π°Π»ΠΈ Python ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΌ.
Python ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Ρ ΡΠ΅Ρ Π²ΡΠ΅ΠΌΡΠ½, ΠΊΠΎΠ³Π΄Π° Π² ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΠ°Ρ Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π»ΠΎ ΠΏΠΎΠ½ΡΡΠΈΡ ΠΎ ΠΏΠΎΡΠΎΠΊΠ°Ρ . ΠΡΠΎΡ ΡΠ·ΡΠΊ ΡΠ°Π·ΡΠ°Π±Π°ΡΡΠ²Π°Π»ΡΡ Π² ΡΠ°ΡΡΡΡΠ΅ Π½Π° Π»ΡΠ³ΠΊΠΎΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ ΠΈ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ° ΡΠ°Π·ΡΠ°Π±ΠΎΡΠΊΠΈ. ΠΡΡ Π±ΠΎΠ»ΡΡΠ΅ ΠΈ Π±ΠΎΠ»ΡΡΠ΅ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ² ΠΏΠ΅ΡΠ΅Ρ ΠΎΠ΄ΠΈΠ»ΠΎ Π½Π° Python.
ΠΠ½ΠΎΠ³ΠΎ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ, Π² ΠΊΠΎΡΠΎΡΡΡ Π½ΡΠΆΠ΄Π°Π»ΡΡ Python, Π±ΡΠ»ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π΄Π»Ρ ΡΠΆΠ΅ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ Π½Π° C. ΠΠ»Ρ ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠ΅Π½ΠΈΡ Π½Π΅ΡΠΎΠ³Π»Π°ΡΠΎΠ²Π°Π½Π½ΡΡ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΉ, ΡΠ·ΡΠΊ C ΡΡΠ΅Π±ΠΎΠ²Π°Π» ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΠ³ΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΠΏΠ°ΠΌΡΡΡΡ, ΠΊΠΎΡΠΎΡΠΎΠ΅ ΡΠΌΠΎΠ³ ΠΏΡΠ΅Π΄ΠΎΡΡΠ°Π²ΠΈΡΡ GIL.
GIL ΠΌΠΎΠΆΠ½ΠΎ Π±ΡΠ»ΠΎ Π»Π΅Π³ΠΊΠΎ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°ΡΡ ΠΈ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ Π² Python. ΠΠ½ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π» ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΠΏΠΎΡΠΊΠΎΠ»ΡΠΊΡ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ Π²Π΅Π»ΠΎΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄Π½ΠΈΠΌ Π±Π»ΠΎΠΊΠΈΡΠ°ΡΠΎΡΠΎΠΌ.
Π’Π΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ Π½Π° C, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π΅ Π±ΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΊΠΎΠ±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΠΌΠΈ, ΡΡΠ°Π»ΠΎ Π»Π΅Π³ΡΠ΅ ΠΈΠ½ΡΠ΅Π³ΡΠΈΡΠΎΠ²Π°ΡΡ. ΠΡΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π½Π° C ΡΡΠ°Π»ΠΈ ΠΎΠ΄Π½ΠΎΠΉ ΠΈΠ· ΠΏΡΠΈΡΠΈΠ½, ΠΏΠΎΡΠ΅ΠΌΡ Python-ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²ΠΎ ΡΡΠ°Π»ΠΎ ΡΠ°ΡΡΠΈΡΡΡΡΡΡ.
ΠΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠ½ΡΡΡ, GIL β ΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΎΠ΅ ΡΠ΅ΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Ρ ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΡΠΎΠ»ΠΊΠ½ΡΠ»ΠΈΡΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ CPython Π² Π½Π°ΡΠ°Π»Π΅ ΠΆΠΈΠ·Π½ΠΈ Python.
ΠΠ»ΠΈΡΠ½ΠΈΠ΅ GIL Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠ΅ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ
ΠΡΠ»ΠΈ ΡΠΌΠΎΡΡΠ΅ΡΡ Π½Π° ΡΠΈΠΏΠΈΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ (Π½Π΅ ΠΎΠ±ΡΠ·Π°ΡΠ΅Π»ΡΠ½ΠΎ Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΡ Π½Π° Python) β Π΅ΡΡΡ ΡΠ°Π·Π½ΠΈΡΠ°, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° Π»ΠΈ ΡΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° ΠΈΠ»ΠΈ ΠΆΠ΅ I/O.
ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ° (Π°Π½Π³Π». CPU-bound) β ΡΡΠΎ Π²ΡΠ΅ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ: ΠΏΠ΅ΡΠ΅ΠΌΠ½ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΌΠ°ΡΡΠΈΡ, ΠΏΠΎΠΈΡΠΊ, ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΠΉ ΠΈ Ρ. Π΄.
ΠΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π½ΡΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ I/O (Π°Π½Π³Π». I/O-bound) β ΡΡΠΎ ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠ°ΡΡΠΎ Π½Π°Ρ ΠΎΠ΄ΡΡΡΡ Π² ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠΈ ΡΠ΅Π³ΠΎ-Π»ΠΈΠ±ΠΎ ΠΎΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠΎΠ² Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° (ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ, ΡΠ°ΠΉΠ», ΠΠ, ΡΠ΅ΡΡ). Π’Π°ΠΊΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ ΠΈΠ½ΠΎΠ³Π΄Π° ΠΌΠΎΠ³ΡΡ ΠΆΠ΄Π°ΡΡ Π΄ΠΎΠ»Π³ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ, ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ»ΡΡΠ°Ρ ΠΎΡ ΠΈΡΡΠΎΡΠ½ΠΈΠΊΠ° ΡΠΎ, ΡΡΠΎ ΠΈΠΌ Π½ΡΠΆΠ½ΠΎ. ΠΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ Ρ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΈΡΡΠΎΡΠ½ΠΈΠΊ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡΡ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠ΅ (Π²Π½ΡΡΡΠ΅Π½Π½ΠΈΠ΅) ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ, ΠΏΡΠ΅ΠΆΠ΄Π΅ ΡΠ΅ΠΌ ΠΎΠ½ Π±ΡΠ΄Π΅Ρ Π³ΠΎΡΠΎΠ² Π²ΡΠ΄Π°ΡΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»Ρ ΠΌΠΎΠΆΠ΅Ρ Π΄ΡΠΌΠ°ΡΡ Π½Π°Π΄ ΡΠ΅ΠΌ, ΡΡΠΎ ΠΈΠΌΠ΅Π½Π½ΠΎ Π²Π²Π΅ΡΡΠΈ Π² ΠΏΠΎΠΈΡΠΊΠΎΠ²ΡΡ ΡΡΡΠΎΠΊΡ ΠΈΠ»ΠΈ ΠΆΠ΅ ΠΊΠ°ΠΊΠΎΠΉ Π·Π°ΠΏΡΠΎΡ ΠΎΡΠΏΡΠ°Π²ΠΈΡΡ Π² ΠΠ.
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΠΏΡΠΎΡΡΠ°Ρ CPU-bound ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΊΠΎΡΠΎΡΠ°Ρ ΠΏΠΎΠΏΡΠΎΡΡΡ Π²Π΅Π΄ΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ ΠΎΡΡΡΡΡ:
ΠΠ°ΠΏΡΡΡΠΈΠ² ΡΡΠΎ Π½Π° 4Ρ -ΡΠ΄Π΅ΡΠ½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅ ΠΏΠΎΠ»ΡΡΠΈΠΌ ΡΠ°ΠΊΠΎΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ:
ΠΠΈΠΆΠ΅ ΠΏΡΠΈΠ²Π΅Π΄Π΅Π½Π° ΡΠ° ΠΆΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, Ρ Π½Π΅Π±ΠΎΠ»ΡΡΠΈΠΌ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ. Π’Π΅ΠΏΠ΅ΡΡ ΠΎΠ±ΡΠ°ΡΠ½ΡΠΉ ΠΎΡΡΡΡΡ Π²Π΅Π΄ΡΡΡΡ Π² Π΄Π²ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠ°Ρ :
ΠΠ°ΠΊ Π²ΠΈΠ΄Π½ΠΎ ΠΈΠ· ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠΎΠ², ΠΎΠ±Π° Π²Π°ΡΠΈΠ°Π½ΡΠ° Π·Π°ΡΡΠ°ΡΠΈΠ»ΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΠΎΠ΄ΠΈΠ½Π°ΠΊΠΎΠ²ΠΎΠ΅ Π²ΡΠ΅ΠΌΡ. Π ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠΈ GIL ΠΏΡΠ΅Π΄ΠΎΡΠ²ΡΠ°ΡΠΈΠ» ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ².
GIL Π½Π΅ ΡΠΈΠ»ΡΠ½ΠΎ Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ I/O-ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ , Ρ. ΠΊ. Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ ΠΎΡ I/O Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΡΠ°ΡΠΏΡΠΎΡΡΡΠ°Π½ΡΠ΅ΡΡΡ ΠΏΠΎ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ.
ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°, ΠΏΠΎΡΠΎΠΊΠΈ ΠΊΠΎΡΠΎΡΠΎΠΉ Π±ΡΠ΄ΡΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΈΡΠΊΠ»ΡΡΠΈΡΠ΅Π»ΡΠ½ΠΎ Ρ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠΌ (Π½Π°ΠΏΡΠΈΠΌΠ΅Ρ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΈΠ·ΠΎΠ±ΡΠ°ΠΆΠ΅Π½ΠΈΡ ΠΏΠΎ ΡΠ°ΡΡΡΠΌ), ΠΈΠ·-Π·Π° Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ ΡΡΠ°Π½Π΅Ρ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ, Π½ΠΎ ΠΈ Π½Π° Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±ΡΠ΄Π΅Ρ Π·Π°ΡΡΠ°ΡΠΈΠ²Π°ΡΡΡΡ Π±ΠΎΠ»ΡΡΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, ΡΠ΅ΠΌ Π΅ΡΠ»ΠΈ Π±Ρ ΠΎΠ½Π° ΠΈΠ·Π½Π°ΡΠ°Π»ΡΠ½ΠΎ Π±ΡΠ»Π° ΡΡΡΠΎΠ³ΠΎ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ.
Π’Π°ΠΊΠΎΠ΅ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ β ΡΡΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠΈ.
ΠΠΎΡΠ΅ΠΌΡ GIL Π²ΡΡ Π΅ΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ?
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠ·ΡΠΊΠ° ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΈ ΡΠΉΠΌΡ ΠΆΠ°Π»ΠΎΠ± ΠΊΠ°ΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ GIL. ΠΠΎ ΡΠ°ΠΊΠΎΠΉ ΠΏΠΎΠΏΡΠ»ΡΡΠ½ΡΠΉ ΡΠ·ΡΠΊ ΠΊΠ°ΠΊ Python Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΠ²Π΅ΡΡΠΈ ΡΠ°ΠΊΠΎΠ΅ ΡΠ°Π΄ΠΈΠΊΠ°Π»ΡΠ½ΠΎΠ΅ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠ΅, ΠΊΠ°ΠΊ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ GIL, Π²Π΅Π΄Ρ ΡΡΠΎ, Π΅ΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, ΠΏΠΎΠ²Π»Π΅ΡΡΡ Π·Π° ΡΠΎΠ±ΠΎΠΉ ΠΊΡΡΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ Π½Π΅ΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΠΎΡΡΠΈ.
Π ΠΏΡΠΎΡΠ»ΠΎΠΌ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠ°ΠΌΠΈ Π±ΡΠ»ΠΈ ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ½ΡΡΡ ΠΏΠΎΠΏΡΡΠΊΠΈ ΡΠ΄Π°Π»Π΅Π½ΠΈΡ GIL. ΠΠΎ Π²ΡΠ΅ ΡΡΠΈ ΠΏΠΎΠΏΡΡΠΊΠΈ ΡΠ°Π·ΡΡΡΠ°Π»ΠΈΡΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΠΌΠΈ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡΠΌΠΈ Π½Π° C, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠ»ΠΎΡΠ½ΠΎ Π·Π°Π²ΠΈΡΠ΅Π»ΠΈ ΠΎΡ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠΈΡ GIL-ΡΠ΅ΡΠ΅Π½ΠΈΠΉ. ΠΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ, Π΅ΡΡΡ ΠΈ Π΄ΡΡΠ³ΠΈΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ, ΡΡ ΠΎΠΆΠΈΠ΅ Ρ GIL. ΠΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ΠΈ Π»ΠΈΠ±ΠΎ ΡΠ½ΠΈΠΆΠ°ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ I/O-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, Π»ΠΈΠ±ΠΎ ΠΏΠΎΠΏΡΠΎΡΡΡ ΡΠ»ΠΎΠΆΠ½Ρ Π² ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ. ΠΠ°ΠΌ Π±Ρ Π½Π΅ Ρ ΠΎΡΠ΅Π»ΠΎΡΡ, ΡΡΠΎΠ±Ρ Π² Π½ΠΎΠ²ΡΡ Π²Π΅ΡΡΠΈΡΡ Π²Π°ΡΠ° ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ° ΡΠ°Π±ΠΎΡΠ°Π»Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅ΠΉ, ΡΠ΅ΠΌ ΡΠ΅ΠΉΡΠ°Ρ, Π²Π΅Π΄Ρ ΡΠ°ΠΊ?
Π‘ΠΎΠ·Π΄Π°ΡΠ΅Π»Ρ Python, Guido van Rossum, Π² ΡΠ΅Π½ΡΡΠ±ΡΠ΅ 2007 Π³ΠΎΠ΄Π° Π²ΡΡΠΊΠ°Π·Π°Π»ΡΡ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρ ΡΡΠΎΠ³ΠΎ Π² ΡΡΠ°ΡΡΠ΅ Β«It isnβt Easy to remove the GILΒ»:
Β«Π― Π±ΡΠ» Π±Ρ ΡΠ°Π΄ ΠΏΠ°ΡΡΠ°ΠΌ Π² Py3k ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π±Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ I/O-ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ Π½Π΅ ΡΠΌΠ΅Π½ΡΡΠ°Π»Π°ΡΡ.Β»
Π‘ ΡΠ΅Ρ ΠΏΠΎΡ Π½ΠΈ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡΠ΅Π΄ΠΏΡΠΈΠ½ΡΡΡΡ ΠΏΠΎΠΏΡΡΠΎΠΊ Π½Π΅ ΡΠ΄ΠΎΠ²Π»Π΅ΡΠ²ΠΎΡΡΠ»Π° ΡΡΠΎ ΡΡΠ»ΠΎΠ²ΠΈΠ΅.
ΠΠΎΡΠ΅ΠΌΡ GIL Π½Π΅ Π±ΡΠ» ΡΠ΄Π°Π»ΡΠ½ Π² Python 3?
Python 3 Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΈΠΌΠ΅Π» Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅Π΄Π΅Π»ΠΊΠΈ Π½Π΅ΠΊΠΎΡΠΎΡΡΡ ΡΡΠ½ΠΊΡΠΈΠΉ Ρ Π½ΡΠ»Ρ, Ρ ΠΎΡΡ ΠΈΠ·-Π·Π° ΡΡΠΎΠ³ΠΎ ΠΌΠ½ΠΎΠ³ΠΈΠ΅ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π½Π° Π‘ ΠΏΠΎΠΏΡΠΎΡΡΡ ΡΠ»ΠΎΠΌΠ°Π»ΠΈΡΡ Π±Ρ ΠΈ ΠΈΡ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π±Ρ ΠΏΠ΅ΡΠ΅Π΄Π΅Π»ΡΠ²Π°ΡΡ. ΠΠΌΠ΅Π½Π½ΠΎ ΠΈΠ·-Π·Π° ΡΡΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ²ΡΠ΅ Π²Π΅ΡΡΠΈΠΈ Python 3 ΡΠ°ΠΊ ΡΠ»Π°Π±ΠΎ ΡΠ°ΡΡ ΠΎΠ΄ΠΈΠ»ΠΈΡΡ ΠΏΠΎ ΡΠΎΠΎΠ±ΡΠ΅ΡΡΠ²Ρ.
ΠΠΎ ΠΏΠΎΡΠ΅ΠΌΡ Π±Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Ρ ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ΠΌ Python 3 Π½Π΅ ΡΠ΄Π°Π»ΠΈΡΡ GIL?
ΠΠ³ΠΎ ΡΠ΄Π°Π»Π΅Π½ΠΈΠ΅ ΡΠ΄Π΅Π»Π°Π΅Ρ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ Π² Python 3 ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅ΠΉ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ Python 2 ΠΈ ΠΏΡΠΎΡΡΠΎ ΠΏΡΠ΅Π΄ΡΡΠ°Π²ΡΡΠ΅, Π²ΠΎ ΡΡΠΎ ΡΡΠΎ Π²ΡΠ»ΡΠ΅ΡΡΡ. ΠΠ΅Π»ΡΠ·Ρ Π½Π΅ Π·Π°ΠΌΠ΅ΡΠΈΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ Π² GIL. ΠΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΡΡΠΎΠΌΡ ΠΎΠ½ Π²ΡΡ Π΅ΡΡ Π½Π΅ ΡΠ΄Π°Π»ΡΠ½.
ΠΠΎ Π² Python 3 Π΄Π΅ΠΉΡΡΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΎΡΠ²ΠΈΠ»ΠΈΡΡ ΡΠ»ΡΡΡΠ΅Π½ΠΈΡ Π΄Π»Ρ ΡΡΡΠ΅ΡΡΠ²ΡΡΡΠ΅Π³ΠΎ GIL. ΠΠΎ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ° Π² ΡΡΠ°ΡΡΠ΅ ΡΠ°ΡΡΠΊΠ°Π·ΡΠ²Π°Π»ΠΎΡΡ ΠΎ Π²Π»ΠΈΡΠ½ΠΈΠΈ GIL Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΊΠΎΡΠΎΡΡΠ΅ Π·Π°ΡΡΠ°Π³ΠΈΠ²Π°ΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ ΠΈΠ»ΠΈ ΡΠΎΠ»ΡΠΊΠΎ I/O. Π ΡΡΠΎ Π½Π°ΡΡΡΡ ΡΠ΅Ρ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, Ρ ΠΊΠΎΡΠΎΡΡΡ ΡΠ°ΡΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈΠ΄ΡΡ Π½Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ, Π° ΡΠ°ΡΡΡ Π½Π° I/O?
Π ΡΠ°ΠΊΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ I/O-ΠΏΠΎΡΠΎΠΊΠΈ Β«ΡΡΡΠ°Π΄Π°ΡΡΒ» ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ Ρ Π½ΠΈΡ Π½Π΅Ρ Π΄ΠΎΡΡΡΠΏΠ° ΠΊ GIL ΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΡΠΎ ΡΠ²ΡΠ·Π°Π½ΠΎ ΡΠΎ Π²ΡΡΡΠΎΠ΅Π½Π½ΡΠΌ Π² Python ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠΎΠΌ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΡΠΆΠ΄Π°Π» ΠΏΠΎΡΠΎΠΊΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡ GIL ΠΏΠΎΡΠ»Π΅ ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π° Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π½ΠΎΠ³ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ. Π ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π½ΠΈΠΊΡΠΎ Π΄ΡΡΠ³ΠΎΠΉ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ GIL, ΡΡΠΈ ΠΏΠΎΡΠΎΠΊΠΈ ΠΌΠΎΠ³Π»ΠΈ ΠΏΡΠΎΠ΄ΠΎΠ»ΠΆΠ°ΡΡ ΡΠ°Π±ΠΎΡΡ.
ΠΠΎ ΡΡΡ Π΅ΡΡΡ ΠΎΠ΄Π½Π° ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°. ΠΠΎΡΡΠΈ Π²ΡΠ΅Π³Π΄Π° GIL Π·Π°Π½ΠΈΠΌΠ°Π΅ΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΡΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ ΠΈ ΠΎΡΡΠ°Π»ΡΠ½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ Π½Π΅ ΡΡΠΏΠ΅Π²Π°ΡΡ Π·Π°Π½ΡΡΡ ΠΌΠ΅ΡΡΠΎ. ΠΡΠΎΡ ΡΠ°ΠΊΡ Π±ΡΠ» ΠΈΠ·ΡΡΠ΅Π½ David Beazley, Π²ΠΈΠ·ΡΠ°Π»ΠΈΠ·Π°ΡΠΈΡ ΡΡΠΎΠ³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ²ΠΈΠ΄Π΅ΡΡ Π·Π΄Π΅ΡΡ.
ΠΡΠΎΠ±Π»Π΅ΠΌΠ° Π±ΡΠ»Π° ΡΠ΅ΡΠ΅Π½Π° Π² Python 3.2 Π² 2009 ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠΌ Antoine Pitrou. ΠΠ½ Π΄ΠΎΠ±Π°Π²ΠΈΠ» ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ ΠΏΠΎΠ΄ΡΡΡΡΠ° ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΡΠΆΠ΄Π°ΡΡΡΡ Π² GIL. Π Π΅ΡΠ»ΠΈ Π΅ΡΡΡ Π΄ΡΡΠ³ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ, Π½ΡΠΆΠ΄Π°ΡΡΠΈΠ΅ΡΡ Π² GIL, ΡΠ΅ΠΊΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ Π½Π΅ Π·Π°Π½ΠΈΠΌΠ°Π» Π±Ρ ΠΈΡ ΠΌΠ΅ΡΡΠΎ.
ΠΠ°ΠΊ ΡΠΏΡΠ°Π²ΠΈΡΡΡΡ GIL?
ΠΡΠ»ΠΈ GIL Ρ Π²Π°Ρ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ, Π²ΠΎΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΡΠ΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π²Ρ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΠΎΠΏΡΠΎΠ±ΠΎΠ²Π°ΡΡ:
ΠΠΎΡΠ»Π΅ Π·Π°ΠΏΡΡΠΊΠ° ΠΏΠΎΠ»ΡΡΠ°Π΅ΠΌ ΡΠ°ΠΊΠΎΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ:
ΠΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅ΡΠΈΡΡ ΠΏΡΠΈΠ»ΠΈΡΠ½ΠΎΠ΅ ΠΏΠΎΠ²ΡΡΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΠΎ ΡΡΠ°Π²Π½Π΅Π½ΠΈΡ Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ Π²Π΅ΡΡΠΈΠ΅ΠΉ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π½Π΅ ΡΠ½ΠΈΠ·ΠΈΠ»ΡΡ Π΄ΠΎ ΠΏΠΎΠ»ΠΎΠ²ΠΈΠ½Ρ. ΠΡΡ ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌΠΈ ΡΠ°ΠΌΠΎ ΠΏΠΎ ΡΠ΅Π±Π΅ ΡΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ. ΠΠ΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ² Π±ΠΎΠ»Π΅Π΅ ΡΠ»ΠΎΠΆΠ½Ρ, ΡΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π½ΠΈΠΌΠΈ Π½ΡΠΆΠ½ΠΎ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π°ΠΊΠΊΡΡΠ°ΡΠ½ΠΎ.
ΠΠ»ΡΡΠ΅ΡΠ½Π°ΡΠΈΠ²Π½ΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΡ Python. Π£ Python Π΅ΡΡΡ ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ°Π·Π½ΡΡ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠ². CPython, Jyton, IronPython ΠΈ PyPy, Π½Π°ΠΏΠΈΡΠ°Π½Π½ΡΠ΅ Π½Π° C, Java, C# ΠΈ Python ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²Π΅Π½Π½ΠΎ. GIL ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»ΡΠ½ΠΎΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ΅ β Π½Π° CPython.
ΠΡ ΠΏΡΠΎΡΡΠΎ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π° ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ, Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ, ΠΏΠΎΠΊΠ° ΠΎΠ΄Π½ΠΈ ΠΈΠ· ΡΠ°ΠΌΡΡ ΡΡΠΊΠΈΡ ΡΠΌΠΎΠ² ΠΏΡΡΠΌΠΎ ΡΠ΅ΠΉΡΠ°Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π°Π΄ ΡΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ΠΌ GIL ΠΈΠ· CPython. ΠΠΎΡ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΠΎΠΏΡΡΠΎΠΊ.
ΠΠ°ΡΠ°ΡΡΡΡ, GIL ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°Π΅ΡΡΡ ΠΊΠ°ΠΊ Π½Π΅ΡΡΠΎ-ΡΠΎ ΡΠ»ΠΎΠΆΠ½ΠΎΠ΅ ΠΈ Π½Π΅ΠΏΠΎΠ½ΡΡΠ½ΠΎΠ΅. ΠΠΎ ΠΈΠΌΠ΅ΠΉΡΠ΅ Π²Π²ΠΈΠ΄Ρ, ΡΡΠΎ ΠΊΠ°ΠΊ python-ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊ, Π²Ρ ΡΡΠΎΠ»ΠΊΠ½ΡΡΠ΅ΡΡ Ρ GIL ΡΠΎΠ»ΡΠΊΠΎ Π΅ΡΠ»ΠΈ Π±ΡΠ΄Π΅ΡΠ΅ ΠΏΠΈΡΠ°ΡΡ ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ Π½Π° C ΠΈΠ»ΠΈ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠ° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ Π²Ρ Π΄ΠΎΠ»ΠΆΠ½Ρ ΠΏΠΎΠ½ΠΈΠΌΠ°ΡΡ Π²ΡΠ΅ Π°ΡΠΏΠ΅ΠΊΡΡ, Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΡΠ΅ ΠΏΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ GIL. ΠΡΠ»ΠΈ ΠΆΠ΅ Π²Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° Π½ΠΈΠ·ΠΊΠΎΡΡΠΎΠ²Π½Π΅Π²Π°Ρ ΡΡΡΡΠΊΡΡΡΠ° GIL β ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Understanding the Python GIL ΠΎΡ David Beazley.
ΠΠ»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° (GIL) ΠΈ Π΅Ρ Π²ΠΎΠ·Π΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ Π² Python
ΠΠ°ΠΊ Π²Ρ, Π½Π°Π²Π΅ΡΠ½ΠΎΠ΅, Π·Π½Π°Π΅ΡΠ΅, Π³Π»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° (GIL, Global Interpreter Lock) β ΡΡΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ, ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°ΡΡΠΈΠΉ, ΠΏΡΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° CPython, Π±Π΅Π·ΠΎΠΏΠ°ΡΠ½ΡΡ ΡΠ°Π±ΠΎΡΡ Ρ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ. ΠΠΎ ΠΈΠ·-Π·Π° GIL Π² ΠΊΠΎΠ½ΠΊΡΠ΅ΡΠ½ΡΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄ Python ΠΌΠΎΠΆΠ΅Ρ Π»ΠΈΡΡ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π½Π΅Π»ΡΠ·Ρ ΡΡΠΊΠΎΡΠΈΡΡ Python-ΠΊΠΎΠ΄, ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΡΠ΅ΡΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΠΈΠ² Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ. ΠΠ΅Π³Π°ΡΠΈΠ²Π½ΠΎΠ΅ Π²Π»ΠΈΡΠ½ΠΈΠ΅ GIL Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Python-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΏΡΠ°Π²Π΄Π°, Π½Π° ΡΡΠΎΠΌ Π½Π΅ Π·Π°ΠΊΠ°Π½ΡΠΈΠ²Π°Π΅ΡΡΡ. Π’Π°ΠΊ, GIL ΡΠΎΠ·Π΄Π°ΡΡ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ Π½Π° ΡΠΈΡΡΠ΅ΠΌΡ. ΠΡΠΎ Π·Π°ΠΌΠ΅Π΄Π»ΡΠ΅Ρ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΈ, ΡΡΠΎ Π²ΡΠ³Π»ΡΠ΄ΠΈΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎ, ΠΌΠΎΠΆΠ΅Ρ Π΄Π°ΠΆΠ΅ ΠΎΠΊΠ°Π·Π°ΡΡ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π½Π° ΠΏΠΎΡΠΎΠΊΠΈ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°.
ΠΡΠΈΠΌ. Wunder Fund: Π² ΡΡΠ°ΡΡΠ΅ ΡΠ°ΡΡΠΊΠ°Π·Π°Π½ΠΎ, Π·Π°ΡΠ΅ΠΌ ΠΏΠΎΡΠ²ΠΈΠ»Π°ΡΡ ΠΈ ΡΡΡΠ΅ΡΡΠ²ΡΠ΅Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° Π² ΠΠΈΡΠΎΠ½Π΅, ΠΊΠ°ΠΊ ΠΎΠ½Π° ΡΠ°Π±ΠΎΡΠ°Π΅Ρ, ΠΈ ΠΊΠ°ΠΊ ΠΎΠ½Π° Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ ΠΠΈΡΠΎΠ½Π°, Π° ΡΠ°ΠΊΠΆΠ΅ ΠΎ ΡΠΎΠΌ, ΠΊΡΠ΄Π° Π² Π±ΡΠ΄ΡΡΠ΅ΠΌ, Π²Π΅ΡΠΎΡΡΠ½ΠΎ, Π±ΡΠ΄Π΅Ρ Π΄Π²ΠΈΠ³Π°ΡΡΡΡ ΠΠΈΡΠΎΠ½. Π£ Π½Π°Ρ Π² ΡΠΎΠ½Π΄Π΅ ΠΏΠΎΡΡΠΈ Π²ΡΡ, ΡΡΠΎ Π½Π΅ Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π½Π° ΠΏΠ»ΡΡΠ°Ρ β Π½Π°ΠΏΠΈΡΠ°Π½ΠΎ Π½Π° ΠΠΈΡΠΎΠ½Π΅, ΠΌΡ ΠΏΡΠΈΡΡΠ°Π»ΡΠ½ΠΎ ΡΠ»Π΅Π΄ΠΈΠΌ Π·Π° ΡΠ΅ΠΌ, ΠΊΡΠ΄Π° Π΄Π²ΠΈΠΆΠ΅ΡΡΡ ΡΠ·ΡΠΊ, ΠΈ Π΅ΡΠ»ΠΈ Π²Ρ ΡΠΎΠΆΠ΅ β Π²Ρ Π·Π½Π°Π΅ΡΠ΅, ΡΡΠΎ Π΄Π΅Π»Π°ΡΡ )
ΠΠ΄Π΅ΡΡ Ρ ΠΎΠΏΠΈΡΠ°ΡΡΡ Π½Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡΠΈ CPython 3.9. ΠΠΎ ΠΌΠ΅ΡΠ΅ ΡΠ°Π·Π²ΠΈΡΠΈΡ CPython Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π΄Π΅ΡΠ°Π»ΠΈ ΡΠ΅Π°Π»ΠΈΠ·Π°ΡΠΈΠΈ GIL, ΠΎΠΏΡΠ΅Π΄Π΅Π»ΡΠ½Π½ΠΎ, ΠΈΠ·ΠΌΠ΅Π½ΡΡΡΡ. ΠΠ°ΡΠ΅ΡΠΈΠ°Π» ΠΎΠΏΡΠ±Π»ΠΈΠΊΠΎΠ²Π°Π½ 22 ΡΠ΅Π½ΡΡΠ±ΡΡ 2021 Π³ΠΎΠ΄Π°, ΠΏΠΎΡΠ»Π΅ ΠΏΡΠ±Π»ΠΈΠΊΠ°ΡΠΈΠΈ Π² Π½Π΅Π³ΠΎ Π²Π½Π΅ΡΠ΅Π½ΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ Π΄ΠΎΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΉ.
ΠΠΎΡΠΎΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ, ΠΏΠΎΡΠΎΠΊΠΈ Python ΠΈ GIL
ΠΡΠ΅ΠΌΡ ΠΎΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΏΠΎΡΠΎΠΊΡ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΈΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡΡ ΠΈΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°. ΠΠΎΡΠΎΠΊ, Π² Π½Π°ΡΠ°Π»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΈΡΠ΅ΡΠ°ΡΠΈΠΈ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ ΡΠΈΠΊΠ»Π°, ΠΏΡΠΎΠ²Π΅ΡΡΠ΅Ρ, ΠΈΠΌΠ΅ΡΡΡΡ Π»ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Π½ΠΈΠ±ΡΠ΄Ρ ΠΏΡΠΈΡΠΈΠ½Ρ Π΄Π»Ρ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΊΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π±Π°ΠΉΡ-ΠΊΠΎΠ΄Π°. ΠΠ°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½Π° ΠΎΠ΄Π½Π° ΠΈΠ· ΡΠ°ΠΊΠΈΡ ΠΏΡΠΈΡΠΈΠ½, ΠΊΠΎΡΠΎΡΠ°Ρ Π·Π°ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΠΌ, ΡΡΠΎ Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Ρ ΠΎΡΠ΅Ρ Π·Π°Ρ Π²Π°ΡΠΈΡΡ GIL. ΠΠΎΡ ΠΊΠ°ΠΊ ΡΡΠΎ Π²ΡΡ ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π² ΠΊΠΎΠ΄Π΅:
Π ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠΉ Python-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ΅ Π³Π»Π°Π²Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ β ΡΡΠΎ Π΅ΡΡ ΠΈ Π΅Π΄ΠΈΠ½ΡΡΠ²Π΅Π½Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ. ΠΠ½ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°Π΅Ρ Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°. Π ΡΡΠΎ ΠΆΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ ? ΠΠΎΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΠΌΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ threading Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΠΎΠ³ΠΎ Python-ΠΏΠΎΡΠΎΠΊΠ°:
Π‘ΠΎΠ±ΡΡΠ²Π΅Π½Π½ΠΎ Π³ΠΎΠ²ΠΎΡΡ, ΡΡΠΎ β Π°Π±ΡΠΎΠ»ΡΡΠ½ΡΠΉ ΠΌΠΈΠ½ΠΈΠΌΡΠΌ ΡΠ²Π΅Π΄Π΅Π½ΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π·Π½Π°ΡΡ ΠΎ GIL. Π ΡΠ΅ΠΏΠ΅ΡΡ Ρ ΡΠΎΠ±ΠΈΡΠ°ΡΡΡ ΡΠ°ΡΡΠΊΠ°Π·Π°ΡΡ ΠΎ ΡΠΎΠΌ, ΠΊΠ°ΠΊ GIL Π²Π»ΠΈΡΠ΅Ρ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Python-ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ. ΠΡΠ»ΠΈ ΡΠΎ, ΡΡΠΎ Π²Ρ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΠ΅ Π² ΡΠ»Π΅Π΄ΡΡΡΠ΅ΠΌ ΡΠ°Π·Π΄Π΅Π»Π΅, ΠΏΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ Π²Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠΌ, Π²Π°Ρ ΠΌΠΎΠ³ΡΡ Π·Π°ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°ΡΡ ΠΈ ΡΠ»Π΅Π΄ΡΡΡΠΈΠ΅ ΡΠ°ΡΡΠΈ ΡΡΠΎΠΉ ΡΡΠ°ΡΡΠΈ, Π³Π΄Π΅ ΠΌΡ ΠΏΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΡΠ°ΡΡΠΌΠΎΡΡΠΈΠΌ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ Π°ΡΠΏΠ΅ΠΊΡΡ GIL.
ΠΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ GIL
ΠΠ΅ΡΠ²ΠΎΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ GIL ΡΠΈΡΠΎΠΊΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ: ΡΡΠΎ Π½Π΅Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Python-ΠΏΠΎΡΠΎΠΊΠΎΠ². Π Π·Π½Π°ΡΠΈΡ β ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, Π΄Π°ΠΆΠ΅ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄Π΅ΡΠ½ΡΡ ΠΌΠ°ΡΠΈΠ½Π°Ρ , ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ Π±ΡΡΡΡΠ΅Π΅, ΡΠ΅ΠΌ ΠΈΡ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠ΅ ΡΠΊΠ²ΠΈΠ²Π°Π»Π΅Π½ΡΡ.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠ»Π΅Π΄ΡΡΡΡΡ ΡΡΠ½ΠΊΡΠΈΡ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΊΠΎΡΠΎΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°. ΠΠ½Π° Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠ° ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π·Π°Π΄Π°Π½Π½ΠΎΠ΅ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠ°Π·:
ΠΡ, Π½Π΅ ΠΌΡΠ΄ΡΡΡΠ²ΡΡ Π»ΡΠΊΠ°Π²ΠΎ, ΠΏΠΎΠΏΡΠΎΠ±ΡΠ΅ΠΌ ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠ΅Π³ΠΎ Python-ΠΊΠΎΠ΄Π°.
ΠΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ 100,000,000 ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π·Π°ΠΏΡΡΡΠΈΡΡ countdown(100_000_000) Π² ΠΎΠ΄Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅, ΠΈΠ»ΠΈ countdown(50_000_000) Π² Π΄Π²ΡΡ ΠΏΠΎΡΠΎΠΊΠ°Ρ , ΠΈΠ»ΠΈ countdown(25_000_000) Π² ΡΠ΅ΡΡΡΡΡ ΠΏΠΎΡΠΎΠΊΠ°Ρ ΠΈ ΡΠ°ΠΊ Π΄Π°Π»Π΅Π΅. Π ΡΠ·ΡΠΊΠ°Ρ , Π³Π΄Π΅ Π½Π΅Ρ GIL, Π²ΡΠΎΠ΄Π΅ C, ΠΌΡ, ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Ρ ΡΠΈΡΠ»ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΡΠΌΠΎΠ³Π»ΠΈ Π±Ρ Π½Π°Π±Π»ΡΠ΄Π°ΡΡ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ. Π― Π·Π°ΠΏΡΡΡΠΈΠ» Python-ΠΊΠΎΠ΄ Π½Π° ΡΠ²ΠΎΡΠΌ MacBook Pro. Π ΠΌΠΎΡΠΌ ΡΠ°ΡΠΏΠΎΡΡΠΆΠ΅Π½ΠΈΠΈ Π±ΡΠ»ΠΈ Π΄Π²Π° ΡΠ΄ΡΠ° ΠΈ ΡΠ΅Ρ Π½ΠΎΠ»ΠΎΠ³ΠΈΡ hyper-threading. ΠΠΎΡ ΡΡΠΎ Ρ ΠΌΠ΅Π½Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ:
ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ²
ΠΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΠΎΠ²Π°Π½ΠΈΡ Π½Π° ΠΏΠΎΡΠΎΠΊ (n)
ΠΡΠ΅ΠΌΡ Π² ΡΠ΅ΠΊΡΠ½Π΄Π°Ρ (Π»ΡΡΡΠ΅Π΅ ΠΈΠ· 3 ΠΏΠΎΠΏΡΡΠΎΠΊ)
Π‘ΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΌΡ Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π»ΠΈ Π±Ρ, Π²ΡΠ΅ΠΌΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ, Π² ΡΡΡΠ½ΠΎΡΡΠΈ, ΠΎΡΡΠ°ΡΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΈ ΡΠ΅ΠΌ ΠΆΠ΅. ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠ³ΡΡ ΠΎΠΊΠ°Π·Π°ΡΡΡΡ Π΄Π°ΠΆΠ΅ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅ ΠΎΠ΄Π½ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΠ³ΠΎ ΠΈΠ·-Π·Π° Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠΉ Π½Π°Π³ΡΡΠ·ΠΊΠΈ Π½Π° ΡΠΈΡΡΠ΅ΠΌΡ, Π²ΡΠ·Π²Π°Π½Π½ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡΠΌΠΈ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ°. Π‘ΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΉ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΡΠΎΡΡΠ°Π²Π»ΡΠ΅Ρ 5 ΠΌΡ, Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΊΠΎΠ½ΡΠ΅ΠΊΡΡΠ° Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π½Π΅ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΡΠ°ΡΡΠΎ. ΠΠΎ Π΅ΡΠ»ΠΈ ΡΠΌΠ΅Π½ΡΡΠΈΡΡ ΡΡΠΎΡ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π», ΠΌΡ ΡΠ²ΠΈΠ΄ΠΈΠΌ Π·Π°ΠΌΠ΅Π΄Π»Π΅Π½ΠΈΠ΅ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ² ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ. ΠΠΈΠΆΠ΅ ΠΌΡ ΠΏΠΎΠ³ΠΎΠ²ΠΎΡΠΈΠΌ ΠΎ ΡΠΎΠΌ, Π·Π°ΡΠ΅ΠΌ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠ½Π°Π΄ΠΎΠ±ΠΈΡΡΡΡ ΡΠΌΠ΅Π½ΡΡΠ°ΡΡ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π» ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ.
Π₯ΠΎΡΡ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ Python-ΠΏΠΎΡΠΎΠΊΠΎΠ² Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΠΎΠΌΠΎΡΡ Π½Π°ΠΌ Π² Π΄Π΅Π»Π΅ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌ, ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΡΠ΅ΡΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΠΏΠΎΡΠΎΠΊΠΈ ΠΌΠΎΠ³ΡΡ ΠΏΡΠΈΠ½Π΅ΡΡΠΈ ΠΏΠΎΠ»ΡΠ·Ρ Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, ΠΊΠΎΠ³Π΄Π° Π½ΡΠΆΠ½ΠΎ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΡΡ ΠΌΠ½ΠΎΠΆΠ΅ΡΡΠ²ΠΎ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π° ΠΊ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ΅ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°. ΠΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ ΡΠ΅Π±Π΅ ΡΠ΅ΡΠ²Π΅Ρ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ ΠΈ, ΠΊΠΎΠ³Π΄Π° ΠΊ Π½Π΅ΠΌΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠ°Ρ ΡΠΈΡΡΠ΅ΠΌΠ°, Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΡΠ½ΠΊΡΠΈΡ-ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ Β«ΠΎΠ±ΡΠ°Π΅ΡΡΡΒ» Ρ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ, ΡΡΠΈΡΡΠ²Π°Ρ Π΄Π°Π½Π½ΡΠ΅ ΠΈΠ· ΠΊΠ»ΠΈΠ΅Π½ΡΡΠΊΠΎΠ³ΠΎ ΡΠΎΠΊΠ΅ΡΠ° ΠΈ Π·Π°ΠΏΠΈΡΡΠ²Π°Ρ Π΄Π°Π½Π½ΡΠ΅ Π² ΡΠΎΠΊΠ΅Ρ. ΠΡΠΈ ΡΡΠ΅Π½ΠΈΠΈ Π΄Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ Π±Π΅Π·Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ Π΄ΠΎ ΡΠ΅Ρ ΠΏΠΎΡ, ΠΏΠΎΠΊΠ° ΠΊΠ»ΠΈΠ΅Π½Ρ Π΅ΠΉ ΡΡΠΎ-Π½ΠΈΠ±ΡΠ΄Ρ Π½Π΅ ΠΎΡΠΏΡΠ°Π²ΠΈΡ. ΠΠΌΠ΅Π½Π½ΠΎ Π² ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΡ ΡΠΈΡΡΠ°ΡΠΈΡΡ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΡ ΠΎΠΊΠ°Π·ΡΠ²Π°Π΅ΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΊΡΡΠ°ΡΠΈ: ΠΏΠΎΠΊΠ° ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ Π±Π΅Π·Π΄Π΅ΠΉΡΡΠ²ΡΠ΅Ρ, Π΄ΡΡΠ³ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΡΠΎ-ΡΠΎ ΠΏΠΎΠ»Π΅Π·Π½ΠΎΠ΅.
ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡΡ Π΄ΡΡΠ³ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΊΠΎΠ΄ Π² ΡΠΎ Π²ΡΠ΅ΠΌΡ, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠΎΠΊ, ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡΠΈΠΉ GIL, ΠΎΠΆΠΈΠ΄Π°Π΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°, Π² CPython Π²ΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° ΡΠ΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½Ρ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ ΡΠ»Π΅Π΄ΡΡΡΠ΅Π³ΠΎ ΠΏΠ°ΡΡΠ΅ΡΠ½Π°:
ΠΡΠ΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠΈΠΌ, ΡΡΠΎ Π½Π°ΠΌ Π½ΡΠΆΠ½ΠΎ Π²ΡΡΠΈΡΠ»ΠΈΡΡ Ρ ΡΡΠΈ SHA-256 Π΄Π»Ρ Π²ΠΎΡΡΠΌΠΈ 128-ΠΌΠ΅Π³Π°Π±Π°ΠΉΡΠ½ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ. ΠΡ ΠΌΠΎΠΆΠ΅ΠΌ Π²ΡΠ·Π²Π°ΡΡ hashlib.sha256(message) Π΄Π»Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ, ΠΎΠ±ΠΎΠΉΠ΄ΡΡΡ ΠΎΠ΄Π½ΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠΎΠΌ, Π½ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈ ΡΠ°ΡΠΏΡΠ΅Π΄Π΅Π»ΠΈΡΡ Π½Π°Π³ΡΡΠ·ΠΊΡ ΠΏΠΎ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΠΌ ΠΏΠΎΡΠΎΠΊΠ°ΠΌ. ΠΠΎΡ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΡ ΠΈΡΡΠ»Π΅Π΄ΠΎΠ²Π°Π½ΠΈΡ ΡΡΠΎΠΉ Π·Π°Π΄Π°ΡΠΈ, ΠΏΠΎΠ»ΡΡΠ΅Π½Π½ΡΠ΅ Π½Π° ΠΌΠΎΡΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅:
ΠΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΠΏΠΎΡΠΎΠΊΠΎΠ²
ΠΠ±ΡΠΈΠΉ ΡΠ°Π·ΠΌΠ΅Ρ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ Π½Π° ΠΏΠΎΡΠΎΠΊ
ΠΡΠ΅ΠΌΡ Π² ΡΠ΅ΠΊΡΠ½Π΄Π°Ρ (Π»ΡΡΡΠ΅Π΅ ΠΈΠ· 3 ΠΏΠΎΠΏΡΡΠΎΠΊ)
ΠΠ΅ΡΠ΅Ρ ΠΎΠ΄ ΠΎΡ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° ΠΊ Π΄Π²ΡΠΌ Π΄Π°ΡΡ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΠ΅ ΠΏΠΎΡΡΠΈ Π² 2 ΡΠ°Π·Π° ΠΈΠ·-Π·Π° ΡΠΎΠ³ΠΎ, ΡΡΠΎ ΡΡΠΈ Π΄Π²Π° ΠΏΠΎΡΠΎΠΊΠ° ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ. ΠΡΠ°Π²Π΄Π°, Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π΅ ΡΠ²Π΅Π»ΠΈΡΠ΅Π½ΠΈΠ΅ ΡΠΈΡΠ»Π° ΠΏΠΎΡΠΎΠΊΠΎΠ² Π½Π΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ ΡΠΈΠ»ΡΠ½ΠΎ ΡΠ»ΡΡΡΠ°Π΅Ρ ΡΠΈΡΡΠ°ΡΠΈΡ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ Π½Π° ΠΌΠΎΡΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅ Π²ΡΠ΅Π³ΠΎ Π΄Π²Π° ΡΠΈΠ·ΠΈΡΠ΅ΡΠΊΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ½ΡΡ ΡΠ΄ΡΠ°. Π’ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ΄Π΅Π»Π°ΡΡ Π²ΡΠ²ΠΎΠ΄ ΠΎ ΡΠΎΠΌ, ΡΡΠΎ, ΠΏΡΠΈΠ±Π΅Π³Π½ΡΠ² ΠΊ ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΠΎΡΡΠΈ, ΠΌΠΎΠΆΠ½ΠΎ ΡΡΠΊΠΎΡΠΈΡΡ Python-ΠΊΠΎΠ΄, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠΈΠΉ Β«ΡΡΠΆΡΠ»ΡΠ΅Β» Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ, Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ Π² ΡΡΠΎΠΌ ΠΊΠΎΠ΄Π΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π²ΡΠ·ΠΎΠ² C-ΡΡΠ½ΠΊΡΠΈΠΉ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡ GIL. ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠ΅ ΡΡΠ½ΠΊΡΠΈΠΈ ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠ±Π½Π°ΡΡΠΆΠΈΡΡ Π½Π΅ ΡΠΎΠ»ΡΠΊΠΎ Π² ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΠΎΠΉ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠ΅, Π½ΠΎ ΠΈ Π² ΠΌΠΎΠ΄ΡΠ»ΡΡ ΡΡΠΎΡΠΎΠ½Π½ΠΈΡ ΡΠ°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΎΠ², ΡΠ°ΡΡΡΠΈΡΠ°Π½Π½ΡΡ Π½Π° ΡΠ΅ΡΡΡΠ·Π½ΡΠ΅ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ, Π²ΡΠΎΠ΄Π΅ NumPy. ΠΠΎΠΆΠ½ΠΎ Π΄Π°ΠΆΠ΅ ΡΠ°ΠΌΠΎΡΡΠΎΡΡΠ΅Π»ΡΠ½ΠΎ ΠΏΠΈΡΠ°ΡΡ C-ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡΠΈΠ΅ GIL.
ΠΡ ΡΠΏΠΎΠΌΠΈΠ½Π°Π»ΠΈ ΠΎ ΠΏΠΎΡΠΎΠΊΠ°Ρ , ΡΠΊΠΎΡΠΎΡΡΡ ΡΠ°Π±ΠΎΡΡ ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π° ΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ CPU, ΡΠΎ Π΅ΡΡΡ β ΠΎ ΠΏΠΎΡΠΎΠΊΠ°Ρ , ΠΊΠΎΡΠΎΡΡΠ΅, Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ, Π·Π°Π½ΡΡΡ Π½Π΅ΠΊΠΈΠΌΠΈ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡΠΌΠΈ. ΠΡ Π³ΠΎΠ²ΠΎΡΠΈΠ»ΠΈ ΠΈ ΠΎ ΠΏΠΎΡΠΎΠΊΠ°Ρ , ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΡΠΎΡΡΡ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½Π° ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠΎΠΉ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° β ΠΎ ΡΠ΅Ρ , ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΠΎΠ»ΡΡΡΡ ΡΠ°ΡΡΡ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π·Π°Π½ΡΡΡ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΠ΅ΠΌ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°. Π‘Π°ΠΌΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ GIL ΠΏΠΎΡΠ²Π»ΡΡΡΡΡ ΠΏΡΠΈ ΡΠΌΠ΅ΡΠ°Π½Π½ΠΎΠΌ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠΈ ΠΈ ΡΠ΅Ρ ΠΈ Π΄ΡΡΠ³ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ². Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΡΠΎΡΡΠΎΠΉ ΡΡ ΠΎ-ΡΠ΅ΡΠ²Π΅Ρ TCP, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ Π²Ρ ΠΎΠ΄ΡΡΠΈΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ΅Π½ΠΈΠΉ. ΠΠΎΠ³Π΄Π° ΠΊ Π½Π΅ΠΌΡ ΠΏΠΎΠ΄ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΊΠ»ΠΈΠ΅Π½Ρ β ΠΎΠ½ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ Π΄Π»Ρ ΡΠ°Π±ΠΎΡΡ Ρ ΡΡΠΈΠΌ ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠΌ:
Π‘ΠΊΠΎΠ»ΡΠΊΠΎ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ Β«ΠΏΠΎΡΡΠ½Π΅ΡΒ» ΡΡΠΎΡ ΡΠ΅ΡΠ²Π΅Ρ? Π― Π½Π°ΠΏΠΈΡΠ°Π» ΠΏΡΠΎΡΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ-ΠΊΠ»ΠΈΠ΅Π½Ρ, ΠΊΠΎΡΠΎΡΠ°Ρ, Π½Π°ΡΡΠΎΠ»ΡΠΊΠΎ Π±ΡΡΡΡΠΎ, Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΡΠΎ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΠΎΡΠΏΡΠ°Π²Π»ΡΠ΅Ρ ΡΠ΅ΡΠ²Π΅ΡΡ 1-Π±Π°ΠΉΡΠΎΠ²ΡΠ΅ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΡ ΠΈ ΠΏΡΠΈΠ½ΠΈΠΌΠ°Π΅Ρ ΠΈΡ ΠΎΡ Π½Π΅Π³ΠΎ. Π£ ΠΌΠ΅Π½Ρ ΠΏΠΎΠ»ΡΡΠΈΠ»ΠΎΡΡ ΡΡΠΎ-ΡΠΎ ΠΎΠΊΠΎΠ»ΠΎ 30 ΡΡΡΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ (RPS, Requests Per Second). ΠΡΠΎ, ΡΠΊΠΎΡΠ΅Π΅ Π²ΡΠ΅Π³ΠΎ, Π½Π΅ ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π½Π°Π΄ΡΠΆΠ½ΡΠΉ ΡΠ΅Π·ΡΠ»ΡΡΠ°Ρ, ΡΠ°ΠΊ ΠΊΠ°ΠΊ ΠΈ ΡΠ΅ΡΠ²Π΅Ρ, ΠΈ ΠΊΠ»ΠΈΠ΅Π½Ρ ΡΠ°Π±ΠΎΡΠ°Π»ΠΈ Π½Π° ΠΎΠ΄Π½ΠΎΠΌ ΠΈ ΡΠΎΠΌ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅. ΠΠΎ ΡΡΡ ΠΊ Π½Π°Π΄ΡΠΆΠ½ΠΎΡΡΠΈ ΡΡΠΎΠ³ΠΎ ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ° Ρ ΠΈ Π½Π΅ ΡΡΡΠ΅ΠΌΠΈΠ»ΡΡ. Π ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠΎΠ²Π°Π»ΠΎ ΠΌΠ΅Π½Ρ ΡΠΎ, ΠΊΠ°ΠΊ ΡΠΏΠ°Π΄ΡΡ RPS Π² ΡΠΎΠΌ ΡΠ»ΡΡΠ°Π΅, Π΅ΡΠ»ΠΈ ΡΠ΅ΡΠ²Π΅Ρ Π±ΡΠ΄Π΅Ρ, Π²ΠΎ Π²ΡΠ΅ΠΌΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ Π·Π°ΠΏΡΠΎΡΠΎΠ² ΠΊΠ»ΠΈΠ΅Π½ΡΠΎΠ², Π²ΡΠΏΠΎΠ»Π½ΡΡΡ Π² ΠΎΡΠ΄Π΅Π»ΡΠ½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ ΠΊΠ°ΠΊΡΡ-Π½ΠΈΠ±ΡΠ΄Ρ ΡΠ΅ΡΡΡΠ·Π½ΡΡ Π²ΡΡΠΈΡΠ»ΠΈΡΠ΅Π»ΡΠ½ΡΡ Π·Π°Π΄Π°ΡΡ.
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΠΎΡ ΠΆΠ΅ ΡΠ°ΠΌΡΠΉ ΡΠ΅ΡΠ²Π΅ΡΠ½ΡΠΉ ΠΊΠΎΠ΄, ΠΊ ΠΊΠΎΡΠΎΡΠΎΠΌΡ ΡΠ΅ΠΏΠ΅ΡΡ Π΄ΠΎΠ±Π°Π²Π»Π΅Π½ ΠΊΠΎΠ΄, Π·Π°ΠΏΡΡΠΊΠ°ΡΡΠΈΠΉ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠΉ ΠΏΠΎΡΠΎΠΊ, ΡΡΡΡΠΎΠ΅Π½Π½ΡΠΉ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΠΏΡΠΈΠΌΠΈΡΠΈΠ²Π½ΠΎ. ΠΠΎΠ΄, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠΉ Π² ΡΡΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅, ΠΈΠ½ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΠ΅Ρ ΠΈ Π΄Π΅ΠΊΡΠ΅ΠΌΠ΅Π½ΡΠΈΡΡΠ΅Ρ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ Π² Π±Π΅ΡΠΊΠΎΠ½Π΅ΡΠ½ΠΎΠΌ ΡΠΈΠΊΠ»Π΅ (ΠΏΡΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ Π»ΡΠ±ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π°, ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠ΅Π³ΠΎ ΡΠ΅ΡΡΡΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, Π² ΡΡΡΠ½ΠΎΡΡΠΈ, ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΎ ΠΆΠ΅ ΡΠ°ΠΌΠΎΠ΅):
ΠΠ°ΠΊ Π΄ΡΠΌΠ°Π΅ΡΠ΅ β Π½Π°ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΈΠ»ΡΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡΡ RPS? Π£ΠΏΠ°Π΄ΡΡ Π»ΠΈΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ? ΠΠ»ΠΈ, ΠΌΠΎΠΆΠ΅Ρ, ΡΠ½ΠΈΠ·ΠΈΡΡΡ Π² 2 ΡΠ°Π·Π°? Π ΠΌΠΎΠΆΠ΅Ρ β Π² 10? ΠΠ΅Ρ. ΠΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Ρ RPS ΡΠΏΠ°Π» Π΄ΠΎ 100, ΡΡΠΎ Π² 300 ΡΠ°Π· ΠΌΠ΅Π½ΡΡΠ΅ ΠΏΠ΅ΡΠ²ΠΎΠ½Π°ΡΠ°Π»ΡΠ½ΠΎΠ³ΠΎ ΠΏΠΎΠΊΠ°Π·Π°ΡΠ΅Π»Ρ. Π ΡΡΠΎ ΠΊΡΠ°ΠΉΠ½Π΅ ΡΠ΄ΠΈΠ²ΠΈΡΠ΅Π»ΡΠ½ΠΎ Π΄Π»Ρ ΡΠΎΠ³ΠΎ, ΠΊΡΠΎ ΠΏΡΠΈΠ²ΡΠΊ ΠΊ ΡΠΎΠΌΡ, ΠΊΠ°ΠΊ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΏΠ»Π°Π½ΠΈΡΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠ»Ρ ΡΠΎΠ³ΠΎ ΡΡΠΎΠ±Ρ ΠΏΡΠΎΠΈΠ»Π»ΡΡΡΡΠΈΡΠΎΠ²Π°ΡΡ ΡΠΎ, ΡΡΠΎ Ρ ΠΈΠΌΠ΅Ρ Π² Π²ΠΈΠ΄Ρ, Π΄Π°Π²Π°ΠΉΡΠ΅ Π·Π°ΠΏΡΡΡΠΈΠΌ ΠΊΠΎΠ΄ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΈ ΠΊΠΎΠ΄ ΠΏΠΎΡΠΎΠΊΠ°, Π²ΡΠΏΠΎΠ»Π½ΡΡΡΠ΅Π³ΠΎ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΡ, Π² Π²ΠΈΠ΄Π΅ ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ², ΡΡΠΎ ΠΏΡΠΈΠ²Π΅Π΄ΡΡ ΠΊ ΡΠΎΠΌΡ, ΡΡΠΎ Π½Π° Π½ΠΈΡ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π΄Π΅ΠΉΡΡΠ²ΠΎΠ²Π°ΡΡ GIL. ΠΠΎΠΆΠ½ΠΎ ΡΠ°Π·Π΄Π΅Π»ΠΈΡΡ ΠΊΠΎΠ΄ Π½Π° Π΄Π²Π° ΠΎΡΠ΄Π΅Π»ΡΠ½ΡΡ ΡΠ°ΠΉΠ»Π°, ΠΈΠ»ΠΈ ΠΏΡΠΎΡΡΠΎ Π²ΠΎΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡΡΡ ΡΡΠ°Π½Π΄Π°ΡΡΠ½ΡΠΌ ΠΌΠΎΠ΄ΡΠ»Π΅ΠΌ multiprocessing Π΄Π»Ρ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ Π½ΠΎΠ²ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΠ². ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΡΡΠΎ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠ³Π»ΡΠ΄Π΅ΡΡ ΡΠ°ΠΊ:
ΠΡΠΎΡ ΠΊΠΎΠ΄ Π²ΡΠ΄Π°ΡΡ ΠΎΠΊΠΎΠ»ΠΎ 20 ΡΡΡΡΡ RPS. ΠΠΎΠ»Π΅Π΅ ΡΠΎΠ³ΠΎ, Π΅ΡΠ»ΠΈ Π·Π°ΠΏΡΡΡΠΈΡΡ Π΄Π²Π°, ΡΡΠΈ ΠΈΠ»ΠΈ ΡΠ΅ΡΡΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΠ°, ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ, RPS ΠΏΠΎΡΡΠΈ Π½Π΅ ΠΌΠ΅Π½ΡΠ΅ΡΡΡ. ΠΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ ΠΠ‘ ΠΎΡΠ΄Π°ΡΡ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ ΠΏΡΠΎΡΠ΅ΡΡΠ°ΠΌ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΡΠΎΡΡΡ ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π° ΠΊ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ΅ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°. Π ΡΡΠΎ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ.
Π Π½Π°ΡΠ΅ΠΌ ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΡΠ΅ΡΠ²Π΅ΡΠ½ΠΎΠ³ΠΎ ΠΊΠΎΠ΄Π° ΠΏΠΎΡΠΎΠΊ, ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΡΠΉ ΠΊ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ΅ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°, ΠΎΠΆΠΈΠ΄Π°Π΅Ρ, ΠΊΠΎΠ³Π΄Π° ΡΠΎΠΊΠ΅Ρ Π±ΡΠ΄Π΅Ρ Π³ΠΎΡΠΎΠ² ΠΊ ΡΡΠ΅Π½ΠΈΡ ΠΈ Π·Π°ΠΏΠΈΡΠΈ, Π½ΠΎ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ Π»ΡΠ±ΠΎΠ³ΠΎ Π΄ΡΡΠ³ΠΎΠ³ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π±ΡΠ΄Π΅Ρ ΡΡ ΡΠ΄ΡΠ°ΡΡΡΡ ΠΏΠΎ ΡΠΎΠΌΡ ΠΆΠ΅ ΡΡΠ΅Π½Π°ΡΠΈΡ. ΠΡΠ΅Π΄ΡΡΠ°Π²ΠΈΠΌ ΡΠ΅Π±Π΅ ΠΏΠΎΡΠΎΠΊ, ΠΎΡΠ²Π΅ΡΠ°ΡΡΠΈΠΉ Π·Π° ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΡΠ΅ΠΉΡΠ°, ΠΊΠΎΡΠΎΡΡΠΉ ΠΎΠΆΠΈΠ΄Π°Π΅Ρ ΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΠ΅Π»ΡΡΠΊΠΎΠ³ΠΎ Π²Π²ΠΎΠ΄Π°. ΠΠ½, Π΅ΡΠ»ΠΈ ΡΡΠ΄ΠΎΠΌ Ρ Π½ΠΈΠΌ Π·Π°ΠΏΡΡΡΠΈΡΡ ΠΏΠΎΡΠΎΠΊ, ΠΈΠ½ΡΠ΅Π½ΡΠΈΠ²Π½ΠΎ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡΠΈΠΉ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ, Π±ΡΠ΄Π΅Ρ ΡΠ΅Π³ΡΠ»ΡΡΠ½ΠΎ Β«ΠΏΠΎΠ΄Π²ΠΈΡΠ°ΡΡΒ». Π―ΡΠ½ΠΎ, ΡΡΠΎ ΠΎΠ±ΡΡΠ½ΡΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ ΡΠ°Π±ΠΎΡΠ°ΡΡ Π½Π΅ ΡΠ°ΠΊ, ΠΈ ΡΡΠΎ ΠΏΡΠΈΡΠΈΠ½ΠΎΠΉ ΡΡΠΎΠ³ΠΎ ΡΠ²Π»ΡΠ΅ΡΡΡ GIL. ΠΠ»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° ΠΌΠ΅ΡΠ°Π΅Ρ ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΡ ΠΠ‘.
Π Π°Π·ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ CPython, Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, Ρ ΠΎΡΠΎΡΠΎ ΠΎΡΠ²Π΅Π΄ΠΎΠΌΠ»Π΅Π½Ρ ΠΎΠ± ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅. ΠΠ½ΠΈ Π½Π°Π·ΡΠ²Π°ΡΡ Π΅Ρ Β«ΡΡΡΠ΅ΠΊΡΠΎΠΌ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡΒ» (convoy effect). ΠΡΠ²ΠΈΠ΄ ΠΠΈΠ·Π»ΠΈ ΡΠ΄Π΅Π»Π°Π» ΠΎΠ± ΡΡΠΎΠΌ Π΄ΠΎΠΊΠ»Π°Π΄ Π² 2010 Π³ΠΎΠ΄Ρ ΠΈ ΠΎΡΠΊΡΡΠ» ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ ΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ΅ Π½Π° bugs.python.org. Π§Π΅ΡΠ΅Π· 11 Π»Π΅Ρ, Π² 2021 Π³ΠΎΠ΄Ρ, ΡΡΠΎ ΠΎΠ±ΡΠ°ΡΠ΅Π½ΠΈΠ΅ Π±ΡΠ»ΠΎ Π·Π°ΠΊΡΡΡΠΎ. ΠΠΎ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° ΡΠ°ΠΊ ΠΈ Π½Π΅ Π±ΡΠ»Π° ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π°. ΠΠ°Π»Π΅Π΅ ΠΌΡ ΠΏΠΎΠΏΡΡΠ°Π΅ΠΌΡΡ ΡΠ°Π·ΠΎΠ±ΡΠ°ΡΡΡΡ Ρ ΡΠ΅ΠΌ, ΠΏΠΎΡΠ΅ΠΌΡ ΡΡΠΎ ΡΠ°ΠΊ.
ΠΡΡΠ΅ΠΊΡ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡ
ΠΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ°, ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΠΎΠ³ΠΎ ΠΊ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡΠΌ CPU, ΡΡΠ°Π·Ρ ΠΆΠ΅ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΏΠΎΡΠΎΠΊ, ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΡΠΉ ΠΊ Π²Π²ΠΎΠ΄Ρ/Π²ΡΠ²ΠΎΠ΄Ρ, ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡ GIL. Π Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠ°, Π·Π°Π²ΠΈΡΡΡΠ΅Π³ΠΎ ΠΎΡ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΡ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°, ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ ΠΏΠΎΡΠ»Π΅ Π·Π°Π²Π΅ΡΡΠ΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°, ΠΏΠΎΡΡΠΎΠΌΡ Ρ Π½Π΅Π³ΠΎ ΠΌΠ΅Π½ΡΡΠ΅ ΡΠ°Π½ΡΠΎΠ² ΠΏΠ΅ΡΠ²ΡΠΌ Π·Π°Ρ Π²Π°ΡΠΈΡΡ GIL. ΠΡΠ»ΠΈ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° ΡΠ²Π»ΡΠ΅ΡΡΡ ΠΏΠΎ-Π½Π°ΡΡΠΎΡΡΠ΅ΠΌΡ Π±ΡΡΡΡΠΎΠΉ, ΡΠΊΠ°ΠΆΠ΅ΠΌ β ΡΡΠΎ Π½Π΅Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ°Ρ ΠΊΠΎΠΌΠ°Π½Π΄Π° send(), ΡΠΎ ΡΠ°Π½ΡΡ ΠΏΠΎΡΠΎΠΊΠ° Π½Π° Π·Π°Ρ Π²Π°Ρ GIL, Π½Π° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅, Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ-ΡΠ°ΠΊΠΈ Π²ΡΡΠΎΠΊΠΈ, Π½ΠΎ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΠΎΠ΄Π½ΠΎΡΠ΄Π΅ΡΠ½ΠΎΠΌ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ΅, Π³Π΄Π΅ ΠΠ‘ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎ ΡΠΎΠΌ, Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π΅ΠΉ Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°ΡΡ.
ΠΠ° ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄Π΅ΡΠ½ΡΡ ΠΊΠΎΠΌΠΏΡΡΡΠ΅ΡΠ°Ρ ΠΠ‘ Π½Π΅ Π½ΡΠΆΠ½ΠΎ ΠΏΡΠΈΠ½ΠΈΠΌΠ°ΡΡ ΡΠ΅ΡΠ΅Π½ΠΈΡ ΠΎ ΡΠΎΠΌ, Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΊΠΎΠ³ΠΎ ΠΈΠ· ΡΡΠΈΡ Π΄Π²ΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΡΡΠ΅Π±ΡΠ΅ΡΡΡ Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°ΡΡ. ΠΠ½Π° ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ±ΠΎΠΈΡ ΡΡΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² Π½Π° ΡΠ°Π·Π½ΡΡ ΡΠ΄ΡΠ°Ρ . Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΎΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎ ΠΏΠΎΡΠΎΠΊ, ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΊΠΎΡΠΎΡΠΎΠ³ΠΎ ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π° ΠΊ CPU, ΠΏΠΎΡΡΠΈ Π³Π°ΡΠ°Π½ΡΠΈΡΠΎΠ²Π°Π½Π½ΠΎ, ΠΏΠ΅ΡΠ²ΡΠΌ Π·Π°Ρ Π²Π°ΡΠΈΡ GIL, Π° Π½Π° ΠΏΡΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ ΠΊΠ°ΠΆΠ΄ΠΎΠΉ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°, Π²ΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΠΎΠΉ Π² ΠΏΠΎΡΠΎΠΊΠ΅, ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΠΎΠΌ ΠΊ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ΅ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°, Π±ΡΠ΄Π΅Ρ Π½Π΅ΠΎΠ±Ρ ΠΎΠ΄ΠΈΠΌΠΎ 5 Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΡ ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄.
ΠΠ±ΡΠ°ΡΠΈΡΠ΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° ΡΠΎ, ΡΡΠΎ ΠΏΠΎΡΠΎΠΊ, ΠΊΠΎΡΠΎΡΡΠΉ ΠΏΡΠΈΠ½ΡΠΆΠ΄Π°ΡΡ ΠΎΡΠ²ΠΎΠ±ΠΎΠ΄ΠΈΡΡ GIL, ΠΆΠ΄ΡΡ Π΄ΠΎ ΡΠΎΠ³ΠΎ ΠΌΠΎΠΌΠ΅Π½ΡΠ°, ΠΏΠΎΠΊΠ° Π΄ΡΡΠ³ΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π½Π΅ Π·Π°Ρ Π²Π°ΡΠΈΡ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΠΎΡΠΎΠΊ, ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΡΠΉ ΠΊ ΠΏΠΎΠ΄ΡΠΈΡΡΠ΅ΠΌΠ΅ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°, Π·Π°Ρ Π²Π°ΡΡΠ²Π°Π΅Ρ GIL ΠΏΠΎΡΠ»Π΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΈΠ½ΡΠ΅ΡΠ²Π°Π»Π° ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ Π±Ρ ΡΡΠΎΠ³ΠΎ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌΠ° Π½Π΅ ΡΡΡΠ΅ΡΡΠ²ΠΎΠ²Π°Π»ΠΎ, ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΡ ΡΡΡΠ΅ΠΊΡΠ° ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π±ΡΠ»ΠΈ Π±Ρ Π΅ΡΡ Ρ ΡΠΆΠ΅.
Π 5 ΠΌΡ β ΠΌΠ½ΠΎΠ³ΠΎ ΡΡΠΎ ΠΈΠ»ΠΈ ΠΌΠ°Π»ΠΎ? ΠΡΠΎ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΡΠΎΠ³ΠΎ, ΡΠΊΠΎΠ»ΡΠΊΠΎ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ Π·Π°Π½ΠΈΠΌΠ°ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π°. ΠΡΠ»ΠΈ ΠΏΠΎΡΠΎΠΊ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠ΅ΠΊΡΠ½Π΄ ΠΆΠ΄ΡΡ ΠΏΠΎΡΠ²Π»Π΅Π½ΠΈΡ Π² ΡΠΎΠΊΠ΅ΡΠ΅ Π΄Π°Π½Π½ΡΡ , ΠΊΠΎΡΠΎΡΡΠ΅ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡΠΎΡΠΈΡΠ°ΡΡ, ΡΠΎ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΡΠ΅ 5 ΠΌΡ ΠΎΡΠΎΠ±ΠΎΠΉ ΡΠΎΠ»ΠΈ Π½Π΅ ΡΡΠ³ΡΠ°ΡΡ. ΠΠΎ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΠΎΡΠ΅Π½Ρ ΠΈ ΠΎΡΠ΅Π½Ρ Π±ΡΡΡΡΠΎ. ΠΠ°ΠΏΡΠΈΠΌΠ΅Ρ, ΠΊΠΎΠΌΠ°Π½Π΄Π° send() Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΡ ΡΠΎΠ»ΡΠΊΠΎ ΡΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° Π±ΡΡΠ΅Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΈ ΠΏΠΎΠ»ΠΎΠ½, Π° Π² ΠΏΡΠΎΡΠΈΠ²Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ ΠΎΡΡΡΠ΅ΡΡΠ²Π»ΡΠ΅ΡΡΡ Π½Π΅ΠΌΠ΅Π΄Π»Π΅Π½Π½ΡΠΉ Π²ΠΎΠ·Π²ΡΠ°Ρ ΠΈΠ· Π½Π΅Ρ. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ Π΅ΡΠ»ΠΈ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²Π²ΠΎΠ΄Π°/Π²ΡΠ²ΠΎΠ΄Π° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΌΠΈΠΊΡΠΎΡΠ΅ΠΊΡΠ½Π΄Ρ, ΡΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΌΠΈΠ»Π»ΠΈΡΠ΅ΠΊΡΠ½Π΄Ρ ΠΎΠΆΠΈΠ΄Π°Π½ΠΈΡ GIL ΠΌΠΎΠ³ΡΡ ΠΎΠΊΠ°Π·Π°ΡΡ ΠΎΠ³ΡΠΎΠΌΠ½ΠΎΠ΅ Π²Π»ΠΈΡΠ½ΠΈΠ΅ Π½Π° ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
ΠΠ°Ρ ΡΡ ΠΎ-ΡΠ΅ΡΠ²Π΅Ρ Π±Π΅Π· ΠΏΠΎΡΠΎΠΊΠ°, ΡΠΈΠ»ΡΠ½ΠΎ Π½Π°Π³ΡΡΠΆΠ°ΡΡΠ΅Π³ΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ, ΡΠΏΠΎΡΠΎΠ±Π΅Π½ ΠΎΠ±ΡΠ°Π±ΠΎΡΠ°ΡΡ 30 ΡΡΡΡΡ Π·Π°ΠΏΡΠΎΡΠΎΠ² Π² ΡΠ΅ΠΊΡΠ½Π΄Ρ. ΠΡΠΎ Π·Π½Π°ΡΠΈΡ, ΡΡΠΎ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠ° ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ 1/30000 = 30 ΠΌΠΊΡ. Π Π΅ΡΠ»ΠΈ ΡΠ΅ΡΡ ΠΈΠ΄ΡΡ ΠΎ ΡΠ΅ΡΠ²Π΅ΡΠ΅ Ρ ΠΏΠΎΡΠΎΠΊΠΎΠΌ, ΠΏΡΠΈΠ²ΡΠ·Π°Π½Π½ΡΠΌ ΠΊ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°, ΠΊΠΎΠΌΠ°Π½Π΄Ρ recv() ΠΈ send() Π΄ΠΎΠ±Π°Π²Π»ΡΡΡ, ΠΊΠ°ΠΆΠ΄Π°Ρ, ΠΏΠΎ 5 ΠΌΡ (5000 ΠΌΠΊΡ) ΠΊ Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ°. Π’Π΅ΠΏΠ΅ΡΡ Π½Π° Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ Π·Π°ΠΏΡΠΎΡΠ° ΡΡΠ΅Π±ΡΠ΅ΡΡΡ 10030 ΠΌΠΊΡ. ΠΡΠΎ β ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ Π² 300 ΡΠ°Π· Π±ΠΎΠ»ΡΡΠ΅, ΡΠ΅ΠΌ Π² ΠΏΠ΅ΡΠ²ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅. Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΡΠΎΠΏΡΡΠΊΠ½Π°Ρ ΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡΡ ΡΠ΅ΡΠ²Π΅ΡΠ° ΠΏΠ°Π΄Π°Π΅Ρ Π² 300 ΡΠ°Π·. ΠΠ°ΠΊ Π²ΠΈΠ΄ΠΈΡΠ΅, ΡΡΠΈ ΡΠΈΡΡΡ ΡΠΎΠ²ΠΏΠ°Π΄Π°ΡΡ.
Π’ΡΡ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°Π΄Π°ΡΡΡΡ Π²ΠΎΠΏΡΠΎΡΠΎΠΌ ΠΎ ΡΠΎΠΌ, ΠΏΡΠΈΠ²ΠΎΠ΄ΠΈΡ Π»ΠΈ Π½Π°Π»ΠΈΡΠΈΠ΅ ΡΡΡΠ΅ΠΊΡΠ° ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡ ΠΊ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌ Π² ΡΠ΅Π°Π»ΡΠ½ΡΡ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡΡ . ΠΡΠ²Π΅ΡΠ° Π½Π° ΡΡΠΎΡ Π²ΠΎΠΏΡΠΎΡ Ρ Π½Π΅ Π·Π½Π°Ρ. Π― Π½ΠΈΠΊΠΎΠ³Π΄Π° Ρ ΠΏΠΎΠ΄ΠΎΠ±Π½ΡΠΌΠΈ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ°ΠΌΠΈ Π½Π΅ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π»ΡΡ ΠΈ Π½Π΅ Π²ΡΡΡΠ΅ΡΠ°Π» ΡΠ²ΠΈΠ΄Π΅ΡΠ΅Π»ΡΡΡΠ² ΡΠΎΠ³ΠΎ, ΡΡΠΎ Ρ Π½ΠΈΠΌΠΈ ΡΡΠ°Π»ΠΊΠΈΠ²Π°Π»ΡΡ ΠΊΡΠΎ-ΡΠΎ Π΅ΡΡ. ΠΠΈΠΊΡΠΎ Π½Π° ΡΡΠΎ Π½Π΅ ΠΆΠ°Π»ΡΠ΅ΡΡΡ, ΠΈ ΡΡΠΎ β ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡΠΈΡΠΈΠ½, ΠΏΠΎ ΠΊΠΎΡΠΎΡΠΎΠΉ Π΄Π°Π½Π½Π°Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΠ° Π΄ΠΎ ΡΠΈΡ ΠΏΠΎΡ Π½Π΅ ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½Π°.
ΠΠΎ ΡΡΠΎ Π΅ΡΠ»ΠΈ ΡΡΡΠ΅ΠΊΡ ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡ Π²ΡΠ·ΡΠ²Π°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ Ρ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡΡ Π²Π°ΡΠ΅Π³ΠΎ ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ? ΠΡΡΡ Π΄Π²Π° ΡΠΏΠΎΡΠΎΠ±Π° ΠΈΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΡ ΡΡΠΈΡ ΠΏΡΠΎΠ±Π»Π΅ΠΌ.
Π£ΡΡΡΠ°Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠΉ ΡΡΡΠ΅ΠΊΡΠ° ΡΠΎΠΏΡΠΎΠ²ΠΎΠΆΠ΄Π΅Π½ΠΈΡ
ΠΠ½ΡΠ΅ΡΠ²Π°Π» ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π² ΡΠ΅ΠΊΡΠ½Π΄Π°Ρ
RPS Π±Π΅Π· CPU-ΠΏΠΎΡΠΎΠΊΠΎΠ²
RPS Ρ ΠΎΠ΄Π½ΠΈΠΌ CPU-ΠΏΠΎΡΠΎΠΊΠΎΠΌ
RPS Ρ Π΄Π²ΡΠΌΡ CPU-ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ
RPS Ρ ΡΠ΅ΡΡΡΡΠΌΡ CPU-ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ
ΠΠ°ΠΊ ΡΡΡΡΠΎΠ΅Π½ GIL Π² Python
ΠΠΎΡΠ΅ΠΌΡ ΠΏΠΎΡΠ»Π΅ ΡΠ°ΡΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ²Π°Π½ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π²Π°ΡΠ΅ΠΉ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ ΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡΡΡΡ Π²Π΄Π²ΠΎΠ΅?
ΠΠΎΡΠ΅ΠΌΡ ΠΏΠΎΡΠ»Π΅ ΡΠΎΠ·Π΄Π°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠ° ΠΏΠ΅ΡΠ΅ΡΡΠ°Π΅Ρ ΡΠ°Π±ΠΎΡΠ°ΡΡ Ctrl-C?
ΠΡΠ΅Π΄ΡΡΠ°Π²Π»ΡΡ Π²Π°ΡΠ΅ΠΌΡ Π²Π½ΠΈΠΌΠ°Π½ΠΈΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ ΡΡΠ°ΡΡΠΈ David Beazley Β«Inside the Python GILΒ». Π Π½Π΅ΠΉ ΡΠ°ΡΡΠΌΠ°ΡΡΠΈΠ²Π°ΡΡΡΡ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΡΠΎΠ½ΠΊΠΎΡΡΠΈ ΡΠ°Π±ΠΎΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈ ΠΎΠ±ΡΠ°Π±ΠΎΡΠΊΠΈ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² Π² Python.
ΠΡΡΡΠΏΠ»Π΅Π½ΠΈΠ΅
ΠΠ°ΠΊ ΠΈΠ·Π²Π΅ΡΡΠ½ΠΎ, Π² Python ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠ΅ΡΡΡ Π³Π»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° (Global Interpreter Lock β GIL), Π½Π°ΠΊΠ»Π°Π΄ΡΠ²Π°ΡΡΠ°Ρ Π½Π΅ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΠ³ΡΠ°Π½ΠΈΡΠ΅Π½ΠΈΡ Π½Π° ΠΏΠΎΡΠΎΠΊΠΈ. Π ΠΈΠΌΠ΅Π½Π½ΠΎ, Π½Π΅Π»ΡΠ·Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°ΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠΎΠ² ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ. ΠΡΠΎ ΠΈΠ·Π±ΠΈΡΠ°Ρ ΡΠ΅ΠΌΠ° Π΄Π»Ρ Ρ ΠΎΠ»ΠΈΠ²Π°ΡΠΎΠ² ΠΎ Python, Π½Π°ΡΡΠ΄Ρ Ρ tail-call ΠΎΠΏΡΠΈΠΌΠΈΠ·Π°ΡΠΈΠ΅ΠΉ, lambda, whitespace ΠΈ Ρ. Π΄.
ΠΠΈΡΠΊΠ»Π΅ΠΉΠΌΠ΅Ρ
Π― Π½Π΅ ΠΈΡΠΏΡΡΡΠ²Π°Ρ Π³Π»ΡΠ±ΠΎΠΊΠΎΠ³ΠΎ Π²ΠΎΠ·ΠΌΡΡΠ΅Π½ΠΈΡ ΠΏΠΎ ΠΏΠΎΠ²ΠΎΠ΄Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ GIL Π² Python. ΠΠΎ Π΄Π»Ρ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΡΡ Π²ΡΡΠΈΡΠ»Π΅Π½ΠΈΠΉ Ρ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ CPU Ρ ΠΏΡΠ΅Π΄ΠΏΠΎΡΠΈΡΠ°Ρ ΠΏΠ΅ΡΠ΅Π΄Π°ΡΡ ΡΠΎΠΎΠ±ΡΠ΅Π½ΠΈΠΉ ΠΈ ΠΌΠ΅ΠΆΠΏΡΠΎΡΠ΅ΡΡΠ½ΠΎΠ΅ Π²Π·ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΠ΅ ΠΈΡΠΏΠΎΠ»ΡΠ·ΠΎΠ²Π°Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ². ΠΠ΄Π½Π°ΠΊΠΎ ΠΌΠ΅Π½Ρ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΡΠ΅Ρ Π½Π΅ΠΎΠΆΠΈΠ΄Π°Π½Π½ΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ GIL Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄Π΅ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°Ρ .
Π’Π΅ΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ
Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΡΡ CPU-Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΡΡΠ½ΠΊΡΠΈΡ (Ρ.Π΅. ΡΡΠ½ΠΊΡΠΈΡ, ΡΠΊΠΎΡΠΎΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΊΠΎΡΠΎΡΠΎΠΉ Π·Π°Π²ΠΈΡΠΈΡ ΠΏΡΠ΅ΠΈΠΌΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎ ΠΎΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΠΈ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°):
Π‘Π½Π°ΡΠ°Π»Π° Π·Π°ΠΏΡΡΡΠΈΠΌ Π΅Π΅ Π΄Π²Π°ΠΆΠ΄Ρ ΠΏΠΎ ΠΎΡΠ΅ΡΠ΅Π΄ΠΈ:
Π’Π΅ΠΏΠ΅ΡΡ Π·Π°ΠΏΡΡΡΠΈΠΌ Π΅Π΅ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎ Π² Π΄Π²ΡΡ ΠΏΠΎΡΠΎΠΊΠ°Ρ :
ΠΠΎΠ΄ΡΠΎΠ±Π½Π΅Π΅ ΠΎ ΠΏΠΎΡΠΎΠΊΠ°Ρ
Python threads β ΡΡΠΎ Π½Π°ΡΡΠΎΡΡΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΈ (POSIX threads ΠΈΠ»ΠΈ Windows threads), ΠΏΠΎΠ»Π½ΠΎΡΡΡΡ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅ΠΌΡΠ΅ ΠΠ‘. Π Π°ΡΡΠΌΠΎΡΡΠΈΠΌ ΠΏΠΎΡΠΎΡΠ½ΠΎΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Π² ΠΏΡΠΎΡΠ΅ΡΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° Python (Π½Π°ΠΏΠΈΡΠ°Π½Π½ΠΎΠ³ΠΎ Π½Π° C). ΠΡΠΈ ΡΠΎΠ·Π΄Π°Π½ΠΈΠΈ ΠΏΠΎΡΠΎΠΊ ΠΏΡΠΎΡΡΠΎ Π²ΡΠΏΠΎΠ»Π½ΡΠ΅Ρ ΠΌΠ΅ΡΠΎΠ΄ run() ΠΎΠ±ΡΠ΅ΠΊΡΠ° Thread ΠΈΠ»ΠΈ Π»ΡΠ±ΡΡ Π·Π°Π΄Π°Π½Π½ΡΡ ΡΡΠ½ΠΊΡΠΈΡ:
ΠΠ° ΡΠ°ΠΌΠΎΠΌ Π΄Π΅Π»Π΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π³ΠΎΡΠ°Π·Π΄ΠΎ Π±ΠΎΠ»ΡΡΠ΅Π΅. Python ΡΠΎΠ·Π΄Π°Π΅Ρ ΠΌΠ°Π»Π΅Π½ΡΠΊΡΡ ΡΡΡΡΠΊΡΡΡΡ Π΄Π°Π½Π½ΡΡ (PyThreadState), Π² ΠΊΠΎΡΠΎΡΠΎΠΉ ΡΠΊΠ°Π·Π°Π½Ρ: ΡΠ΅ΠΊΡΡΠΈΠΉ stack frame Π² ΠΊΠΎΠ΄Π΅ Python, ΡΠ΅ΠΊΡΡΠ°Ρ Π³Π»ΡΠ±ΠΈΠ½Π° ΡΠ΅ΠΊΡΡΡΠΈΠΈ, ΠΈΠ΄Π΅Π½ΡΠΈΡΠΈΠΊΠ°ΡΠΎΡ ΠΏΠΎΡΠΎΠΊΠ°, Π½Π΅ΠΊΠΎΡΠΎΡΠ°Ρ ΠΈΠ½ΡΠΎΡΠΌΠ°ΡΠΈΡ ΠΎΠ± ΠΈΡΠΊΠ»ΡΡΠ΅Π½ΠΈΡΡ . Π‘ΡΡΡΠΊΡΡΡΠ° Π·Π°Π½ΠΈΠΌΠ°Π΅Ρ ΠΌΠ΅Π½Π΅Π΅ 100 Π±Π°ΠΉΡ. ΠΠ°ΡΠ΅ΠΌ Π·Π°ΠΏΡΡΠΊΠ°Π΅ΡΡΡ Π½ΠΎΠ²ΡΠΉ ΠΏΠΎΡΠΎΠΊ (pthread), Π² ΠΊΠΎΡΠΎΡΠΎΠΌ ΠΊΠΎΠ΄ Π½Π° ΡΠ·ΡΠΊΠ΅ C Π²ΡΠ·ΡΠ²Π°Π΅Ρ PyEval_CallObject, ΠΊΠΎΡΠΎΡΡΠΉ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ ΡΠΎ, ΡΡΠΎ ΡΠΊΠ°Π·Π°Π½ΠΎ Π² Python callable.
ΠΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Ρ ΡΠ°Π½ΠΈΡ Π² Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΡΠΊΠ°Π·Π°ΡΠ΅Π»Ρ Π½Π° ΡΠ΅ΠΊΡΡΠΈΠΉ Π°ΠΊΡΠΈΠ²Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ. ΠΡΠΏΠΎΠ»Π½ΡΠ΅ΠΌΡΠ΅ Π΄Π΅ΠΉΡΡΠ²ΠΈΡ Π²ΡΠ΅ΡΠ΅Π»ΠΎ Π·Π°Π²ΠΈΡΡΡ ΠΎΡ ΡΡΠΎΠΉ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΠΎΠΉ:
ΠΠ΅ΡΠ°Π»ΡΠ½ΠΎ ΠΈΠ·Π²Π΅ΡΡΠ½ΡΠΉ GIL
Π ΡΡΠΎΠΌ Π²ΡΡ Π·Π°Π³Π²ΠΎΠ·Π΄ΠΊΠ°: Π² Π»ΡΠ±ΠΎΠΉ ΠΌΠΎΠΌΠ΅Π½Ρ ΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ ΡΠΎΠ»ΡΠΊΠΎ ΠΎΠ΄ΠΈΠ½ ΠΏΠΎΡΠΎΠΊ Python. ΠΠ»ΠΎΠ±Π°Π»ΡΠ½Π°Ρ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²ΠΊΠ° ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° β GIL β ΡΡΠ°ΡΠ΅Π»ΡΠ½ΠΎ ΠΊΠΎΠ½ΡΡΠΎΠ»ΠΈΡΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΡΡΠ΅Π΄ΠΎΠ². GIL Π³Π°ΡΠ°Π½ΡΠΈΡΡΠ΅Ρ ΠΊΠ°ΠΆΠ΄ΠΎΠΌΡ ΠΏΠΎΡΠΎΠΊΡ ΡΠΊΡΠΊΠ»ΡΠ·ΠΈΠ²Π½ΡΠΉ Π΄ΠΎΡΡΡΠΏ ΠΊ ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΠΌ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° (ΠΈ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠ΅ Π²ΡΠ·ΠΎΠ²Ρ C-ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ ΡΠ°Π±ΠΎΡΠ°ΡΡ ΠΏΡΠ°Π²ΠΈΠ»ΡΠ½ΠΎ).
ΠΡΠΈΠ½ΡΠΈΠΏ ΡΠ°Π±ΠΎΡΡ ΠΏΡΠΎΡΡ. ΠΠΎΡΠΎΠΊΠΈ ΡΠ΄Π΅ΡΠΆΠΈΠ²Π°ΡΡ GIL, ΠΏΠΎΠΊΠ° Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ. ΠΠ΄Π½Π°ΠΊΠΎ ΠΎΠ½ΠΈ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡ Π΅Π³ΠΎ ΠΏΡΠΈ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ΠΈΠΈ Π΄Π»Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°. ΠΠ°ΠΆΠ΄ΡΠΉ ΡΠ°Π·, ΠΊΠΎΠ³Π΄Π° ΠΏΠΎΡΠΎΠΊ Π²ΡΠ½ΡΠΆΠ΄Π΅Π½ ΠΆΠ΄Π°ΡΡ, Π΄ΡΡΠ³ΠΈΠ΅, Π³ΠΎΡΠΎΠ²ΡΠ΅ ΠΊ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ, ΠΏΠΎΡΠΎΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΡΡ ΡΠ²ΠΎΠΉ ΡΠ°Π½Ρ Π·Π°ΠΏΡΡΡΠΈΡΡΡΡ.
ΠΡΠΈ ΡΠ°Π±ΠΎΡΠ΅ Ρ CPU-Π·Π°Π²ΠΈΡΠΈΠΌΡΠΌΠΈ ΠΏΠΎΡΠΎΠΊΠ°ΠΌΠΈ, ΠΊΠΎΡΠΎΡΡΠ΅ Π½ΠΈΠΊΠΎΠ³Π΄Π° Π½Π΅ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΡΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΈ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°, ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΈ ΠΏΡΠΎΠ²ΠΎΠ΄ΠΈΡ ΠΏΡΠΎΠ²Π΅ΡΠΊΡ (Β«the periodic checkΒ»).
ΠΠΎ ΡΠΌΠΎΠ»ΡΠ°Π½ΠΈΡ ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΠΊΠ°ΠΆΠ΄ΡΠ΅ 100 Β«ΡΠΈΠΊΠΎΠ²Β», Π½ΠΎ ΡΡΠΎΡ ΠΏΠ°ΡΠ°ΠΌΠ΅ΡΡ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ Ρ ΠΏΠΎΠΌΠΎΡΡΡ sys.setcheckinterval(). ΠΠ½ΡΠ΅ΡΠ²Π°Π» ΠΏΡΠΎΠ²Π΅ΡΠΊΠΈ β Π³Π»ΠΎΠ±Π°Π»ΡΠ½ΡΠΉ ΡΡΠ΅ΡΡΠΈΠΊ, Π°Π±ΡΠΎΠ»ΡΡΠ½ΠΎ Π½Π΅Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ ΠΎΡ ΠΏΠΎΡΡΠ΄ΠΊΠ° ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ ΠΏΠΎΡΠΎΠΊΠΎΠ².
ΠΡΠΈ ΠΏΠ΅ΡΠΈΠΎΠ΄ΠΈΡΠ΅ΡΠΊΠΎΠΉ ΠΏΡΠΎΠ²Π΅ΡΠΊΠ΅ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅ Π·Π°ΠΏΡΡΠΊΠ°ΡΡΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠΈΠ³Π½Π°Π»ΠΎΠ², Π΅ΡΠ»ΠΈ ΡΠ°ΠΊΠΎΠ²ΡΠ΅ ΠΈΠΌΠ΅ΡΡΡΡ. ΠΠ°ΡΠ΅ΠΌ GIL ΠΎΡΠΊΠ»ΡΡΠ°Π΅ΡΡΡ ΠΈ Π²ΠΊΠ»ΡΡΠ°Π΅ΡΡΡ Π²Π½ΠΎΠ²Ρ. ΠΠ° ΡΡΠΎΠΌ ΡΡΠ°ΠΏΠ΅ ΠΎΠ±Π΅ΡΠΏΠ΅ΡΠΈΠ²Π°Π΅ΡΡΡ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ΅Π½ΠΈΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΈΡ CPU-Π·Π°Π²ΠΈΡΠΈΠΌΡΡ ΠΏΠΎΡΠΎΠΊΠΎΠ² (ΠΏΡΠΈ ΠΊΡΠ°ΡΠΊΠΎΠΌ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π΅Π½ΠΈΠΈ GIL Π΄ΡΡΠ³ΠΈΠ΅ ΡΡΠ΅Π΄Ρ ΠΈΠΌΠ΅ΡΡ ΡΠ°Π½Ρ Π½Π° Π·Π°ΠΏΡΡΠΊ).
Π’ΠΈΠΊΠΈ ΠΏΡΠΈΠΌΠ΅ΡΠ½ΠΎ ΡΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΈΠ½ΡΡΡΡΠΊΡΠΈΠΉ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°. ΠΠ½ΠΈ Π½Π΅ ΠΎΡΠ½ΠΎΠ²ΡΠ²Π°ΡΡΡΡ Π½Π° Π²ΡΠ΅ΠΌΠ΅Π½ΠΈ. Π€Π°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ, Π΄Π»ΠΈΠ½Π½Π°Ρ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΡ ΠΌΠΎΠΆΠ΅Ρ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ Π²ΡΡ:
Π’ΠΈΠΊΠΈ Π½Π΅Π»ΡΠ·Ρ ΠΏΡΠ΅ΡΠ²Π°ΡΡ, Ctrl-C Π² Π΄Π°Π½Π½ΠΎΠΌ ΡΠ»ΡΡΠ°Π΅ Π½Π΅ ΠΎΡΡΠ°Π½ΠΎΠ²ΠΈΡ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ.
Π‘ΠΈΠ³Π½Π°Π»Ρ
ΠΠΎΠ³Π΄Π° ΠΏΠΎΡΡΡΠΏΠ°Π΅Ρ ΡΠΈΠ³Π½Π°Π», ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π·Π°ΠΏΡΡΠΊΠ°Π΅Ρ Β«checkΒ» ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΊΠ°, ΠΏΠΎΠΊΠ° Π½Π΅ Π·Π°ΠΏΡΡΡΠΈΡΡΡ Π³Π»Π°Π²Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊΠΈ ΡΠΈΠ³Π½Π°Π»ΠΎΠ² ΠΌΠΎΠ³ΡΡ Π±ΡΡΡ Π·Π°ΠΏΡΡΠ΅Π½Ρ ΡΠΎΠ»ΡΠΊΠΎ Π² Π³Π»Π°Π²Π½ΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ΅, ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΡΠ°ΡΡΠΎ Π²ΡΠΊΠ»ΡΡΠ°Π΅Ρ ΠΈ Π²ΠΊΠ»ΡΡΠ°Π΅Ρ GIL, ΠΏΠΎΠΊΠ° Π½Π΅ Π·Π°ΠΏΡΡΡΠΈΡΡΡ Π³Π»Π°Π²Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ.
ΠΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊ ΠΏΠΎΡΠΎΠΊΠΎΠ²
Π£ Python Π½Π΅Ρ ΡΡΠ΅Π΄ΡΡΠ² Π΄Π»Ρ ΠΎΠΏΡΠ΅Π΄Π΅Π»Π΅Π½ΠΈΡ, ΠΊΠ°ΠΊΠΎΠΉ ΠΏΠΎΡΠΎΠΊ Π΄ΠΎΠ»ΠΆΠ΅Π½ Π·Π°ΠΏΡΡΡΠΈΡΡΡΡ ΡΠ»Π΅Π΄ΡΡΡΠΈΠΌ. ΠΠ΅Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ², Π²ΡΡΠ΅ΡΠ½ΡΡΡΠ΅ΠΉ ΠΌΠ½ΠΎΠ³ΠΎΠ·Π°Π΄Π°ΡΠ½ΠΎΡΡΠΈ, round-robin ΠΈ Ρ.ΠΏ. ΠΡΠ° ΡΡΠ½ΠΊΡΠΈΡ ΡΠ΅Π»ΠΈΠΊΠΎΠΌ Π²ΠΎΠ·Π»Π°Π³Π°Π΅ΡΡΡ Π½Π° ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΡΡ ΡΠΈΡΡΠ΅ΠΌΡ. ΠΡΠΎ ΠΎΠ΄Π½Π° ΠΈΠ· ΠΏΡΠΈΡΠΈΠ½ ΡΡΡΠ°Π½Π½ΠΎΠΉ ΡΠ°Π±ΠΎΡΡ ΡΠΈΠ³Π½Π°Π»ΠΎΠ²: ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π½ΠΈΠΊΠ°ΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΊΠΎΠ½ΡΡΠΎΠ»Π»ΠΈΡΠΎΠ²Π°ΡΡ Π·Π°ΠΏΡΡΠΊ ΠΏΠΎΡΠΎΠΊΠΎΠ², ΠΎΠ½ ΠΏΡΠΎΡΡΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΈΡ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ ΡΠ°ΡΠ΅, Π½Π°Π΄Π΅ΡΡΡ, ΡΡΠΎ Π·Π°ΠΏΡΡΡΠΈΡΡΡ Π³Π»Π°Π²Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ.
Ctrl-C ΡΠ°ΡΡΠΎ Π½Π΅ ΡΡΠ°Π±Π°ΡΡΠ²Π°Π΅Ρ Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡΠΎΡΠ½ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΠ°Ρ , ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ Π³Π»Π°Π²Π½ΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΎΠ±ΡΡΠ½ΠΎ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½ Π½Π΅ΠΏΡΠ΅ΡΡΠ²Π°Π΅ΠΌΡΠΌ thread-join ΠΈΠ»ΠΈ lock. ΠΠΎΠΊΠ° ΠΎΠ½ Π·Π°Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°Π½, ΠΎΠ½ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ Π·Π°ΠΏΡΡΡΠΈΡΡΡΡ. ΠΠ°ΠΊ ΡΠ»Π΅Π΄ΡΡΠ²ΠΈΠ΅, ΠΎΠ½ Π½Π΅ ΡΠΌΠΎΠΆΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½ΠΈΡΡ ΠΎΠ±ΡΠ°Π±ΠΎΡΡΠΈΠΊ ΡΠΈΠ³Π½Π°Π»Π°.
Π ΠΊΠ°ΡΠ΅ΡΡΠ²Π΅ Π΄ΠΎΠΏΠΎΠ»Π½ΠΈΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π±ΠΎΠ½ΡΡΠ°, ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ ΠΎΡΡΠ°Π΅ΡΡΡ Π² ΡΠΎΡΡΠΎΡΠ½ΠΈΠΈ, Π³Π΄Π΅ ΠΎΠ½ ΠΏΡΡΠ°Π΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠΈΡΡ ΠΏΠΎΡΠΎΠΊ ΠΏΠΎΡΠ»Π΅ ΠΊΠ°ΠΆΠ΄ΠΎΠ³ΠΎ ΡΠΈΠΊΠ°. ΠΠ°Π»ΠΎ ΡΠΎΠ³ΠΎ, ΡΡΠΎ Π²Ρ Π½Π΅ ΠΌΠΎΠΆΠ΅ΡΠ΅ ΠΏΡΠ΅ΡΠ²Π°ΡΡ ΠΏΡΠΎΠ³ΡΠ°ΠΌΠΌΡ, ΠΎΠ½Π° Π΅ΡΠ΅ ΠΈ ΡΠ°Π±ΠΎΡΠ°Π΅Ρ ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅.
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ GIL
ΠΠ°Π΄Π΅ΡΠΆΠΊΠ° ΠΌΠ΅ΠΆΠ΄Ρ ΠΎΡΠΏΡΠ°Π²ΠΊΠΎΠΉ ΡΠΈΠ³Π½Π°Π»Π° ΠΈ Π·Π°ΠΏΡΡΠΊΠΎΠΌ ΠΏΠΎΡΠΎΠΊΠ° ΠΌΠΎΠΆΠ΅Ρ Π±ΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ ΡΡΡΠ΅ΡΡΠ²Π΅Π½Π½ΠΎΠΉ, ΡΡΠΎ Π·Π°Π²ΠΈΡΠΈΡ ΠΎΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΡ. Π ΠΎΠ½Π° ΡΡΠΈΡΡΠ²Π°Π΅Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ. ΠΡΠΈ ΡΡΠΎΠΌ Π·Π°Π΄Π°ΡΠΈ, ΡΡΠ΅Π±ΡΡΡΠΈΠ΅ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΉ Π²Π²ΠΎΠ΄Π°-Π²ΡΠ²ΠΎΠ΄Π°, ΠΈΠΌΠ΅ΡΡ Π±ΠΎΠ»Π΅Π΅ Π²ΡΡΠΎΠΊΠΈΠΉ ΠΏΡΠΈΠΎΡΠΈΡΠ΅Ρ, ΡΠ΅ΠΌ CPU-Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅. ΠΡΠ»ΠΈ ΡΠΈΠ³Π½Π°Π» ΠΏΠΎΡΡΠ»Π°Π΅ΡΡΡ ΠΏΠΎΡΠΎΠΊΡ Ρ Π½ΠΈΠ·ΠΊΠΈΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ, Π° ΠΏΡΠΎΡΠ΅ΡΡΠΎΡ Π·Π°Π½ΡΡ Π±ΠΎΠ»Π΅Π΅ Π²Π°ΠΆΠ½ΡΠΌΠΈ Π·Π°Π΄Π°ΡΠ°ΠΌΠΈ, ΡΠΎ ΡΡΠΎΡ ΠΏΠΎΡΠΎΠΊ Π½Π΅ Π±ΡΠ΄Π΅Ρ Π²ΡΠΏΠΎΠ»Π½ΡΡΡΡΡ Π΄ΠΎΠ²ΠΎΠ»ΡΠ½ΠΎ Π΄ΠΎΠ»Π³ΠΎ.
Π ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΡΠΈΠ³Π½Π°Π»ΠΎΠ², ΠΊΠΎΡΠΎΡΡΠ΅ ΠΏΠΎΡΡΠ»Π°Π΅Ρ ΠΏΠΎΡΠΎΠΊ GIL, ΡΡΠ°Π½ΠΎΠ²ΠΈΡΡΡ ΡΠ»ΠΈΡΠΊΠΎΠΌ ΠΌΠ½ΠΎΠ³ΠΎ.
ΠΠ°ΠΆΠ΄ΡΠ΅ 100 ΡΠΈΠΊΠΎΠ² ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡ Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ ΠΌΡΡΡΠ΅ΠΊΡ, ΠΏΠΎΡΡΠ»Π°Π΅Ρ ΡΠΈΠ³Π½Π°Π» Π² ΠΏΠ΅ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ ΠΈΠ»ΠΈ ΡΠ΅ΠΌΠ°ΡΠΎΡ ΠΏΡΠΎΡΠ΅ΡΡΡ, ΠΊΠΎΡΠΎΡΡΠΉ Π²ΡΡ Π²ΡΠ΅ΠΌΡ ΡΡΠΎΠ³ΠΎ ΠΆΠ΄Π΅Ρ.
ΠΠ·ΠΌΠ΅ΡΠΈΠΌ ΠΊΠΎΠ»ΠΈΡΠ΅ΡΡΠ²ΠΎ ΡΠΈΡΡΠ΅ΠΌΠ½ΡΡ
Π²ΡΠ·ΠΎΠ²ΠΎΠ².
ΠΠ»Ρ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΠΎΠ³ΠΎ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΡ: 736 (Unix), 117 (Mac).
ΠΠ»Ρ Π΄Π²ΡΡ
ΠΏΠΎΡΠΎΠΊΠΎΠ²: 1149 (Unix), 3,3 ΠΌΠ»Π½. (Mac).
ΠΠ»Ρ Π΄Π²ΡΡ
ΠΏΠΎΡΠΎΠΊΠΎΠ² Π½Π° Π΄Π²ΡΡ
ΡΡΠ΄Π΅ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅: 1149 (Unix), 9,5 ΠΌΠ»Π½. (Mac).
ΠΠ° ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄Π΅ΡΠ½ΠΎΠΉ ΡΠΈΡΡΠ΅ΠΌΠ΅ CPU-Π·Π°Π²ΠΈΡΠΈΠΌΡΠ΅ ΠΏΡΠΎΡΠ΅ΡΡΡ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°ΡΡΡΡ ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΠΎ (Π½Π° ΡΠ°Π·Π½ΡΡ ΡΠ΄ΡΠ°Ρ ), Π² ΡΠ΅Π·ΡΠ»ΡΡΠ°ΡΠ΅ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ Π±ΠΎΡΡΠ±Π° Π·Π° GIL:
ΠΠΆΠΈΠ΄Π°ΡΡΠΈΠΉ ΠΏΠΎΡΠΎΠΊ ΠΏΡΠΈ ΡΡΠΎΠΌ ΠΌΠΎΠΆΠ΅Ρ ΡΠ΄Π΅Π»Π°ΡΡ ΡΠΎΡΠ½ΠΈ Π±Π΅Π·ΡΡΠΏΠ΅ΡΠ½ΡΡ
ΠΏΠΎΠΏΡΡΠΎΠΊ Π·Π°Ρ
Π²Π°ΡΠΈΡΡ GIL.
ΠΡ Π²ΠΈΠ΄ΠΈΠΌ, ΡΡΠΎ ΠΏΡΠΎΠΈΡΡ
ΠΎΠ΄ΠΈΡ Π±ΠΈΡΠ²Π° Π·Π° Π΄Π²Π΅ Π²Π·Π°ΠΈΠΌΠΎΠΈΡΠΊΠ»ΡΡΠ°ΡΡΠΈΠ΅ ΡΠ΅Π»ΠΈ. Python ΠΏΡΠΎΡΡΠΎ Ρ
ΠΎΡΠ΅Ρ Π·Π°ΠΏΡΡΠΊΠ°ΡΡ Π½Π΅ Π±ΠΎΠ»ΡΡΠ΅ ΠΎΠ΄Π½ΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ° Π² ΠΎΠ΄ΠΈΠ½ ΠΌΠΎΠΌΠ΅Π½Ρ. Π ΠΎΠΏΠ΅ΡΠ°ΡΠΈΠΎΠ½Π½Π°Ρ ΡΠΈΡΡΠ΅ΠΌΠ° (Β«ΠΠΎΠΎ, ΠΌΠ½ΠΎΠ³ΠΎ ΡΠ΄Π΅Ρ!Β») ΡΠ΅Π΄ΡΠΎ ΠΏΠ΅ΡΠ΅ΠΊΠ»ΡΡΠ°Π΅Ρ ΠΏΠΎΡΠΎΠΊΠΈ, ΠΏΡΡΠ°ΡΡΡ ΠΈΠ·Π²Π»Π΅ΡΡ ΠΌΠ°ΠΊΡΠΈΠΌΠ°Π»ΡΠ½ΡΡ Π²ΡΠ³ΠΎΠ΄Ρ ΠΈΠ· Π²ΡΠ΅Ρ
ΡΠ΄Π΅Ρ.
ΠΠ°ΠΆΠ΅ ΠΎΠ΄ΠΈΠ½ CPU-Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ ΠΏΠΎΡΠΎΠΊ ΠΏΠΎΡΠΎΠΆΠ΄Π°Π΅Ρ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ β ΠΎΠ½ ΡΠ²Π΅Π»ΠΈΡΠΈΠ²Π°Π΅Ρ Π²ΡΠ΅ΠΌΡ ΠΎΡΠΊΠ»ΠΈΠΊΠ° I/O-Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠ³ΠΎ ΠΏΠΎΡΠΎΠΊΠ°.
ΠΠΎΡΠ»Π΅Π΄Π½ΠΈΠΉ ΠΏΡΠΈΠΌΠ΅Ρ β ΠΏΡΠΈΡΡΠ΄Π»ΠΈΠ²Π°Ρ ΡΠΎΡΠΌΠ° ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ ΡΠΌΠ΅Π½Ρ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠ². CPU-Π·Π°Π²ΠΈΡΠΈΠΌΡΠΉ ΠΏΡΠΎΡΠ΅ΡΡ (Ρ Π½ΠΈΠ·ΠΊΠΈΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ) Π±Π»ΠΎΠΊΠΈΡΡΠ΅Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ I/O-Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠ³ΠΎ (Ρ Π²ΡΡΠΎΠΊΠΈΠΌ ΠΏΡΠΈΠΎΡΠΈΡΠ΅ΡΠΎΠΌ). ΠΡΠΎ ΠΏΡΠΎΠΈΡΡ ΠΎΠ΄ΠΈΡ ΡΠΎΠ»ΡΠΊΠΎ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄Π΅ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°Ρ , ΠΏΠΎΡΠΎΠΌΡ ΡΡΠΎ I/O-ΠΏΠΎΡΠΎΠΊ Π½Π΅ ΠΌΠΎΠΆΠ΅Ρ ΠΏΡΠΎΡΠ½ΡΡΡΡΡ Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Π±ΡΡΡΡΠΎ ΠΈ Π·Π°ΠΏΠΎΠ»ΡΡΠΈΡΡ GIL ΡΠ°Π½ΡΡΠ΅ CPU-Π·Π°Π²ΠΈΡΠΈΠΌΠΎΠ³ΠΎ.
ΠΠ°ΠΊΠ»ΡΡΠ΅Π½ΠΈΠ΅
Π Π΅Π°Π»ΠΈΠ·Π°ΡΠΈΡ GIL Π² Python Π·Π° ΠΏΠΎΡΠ»Π΅Π΄Π½ΠΈΠ΅ 10 Π»Π΅Ρ ΠΏΠΎΡΡΠΈ Π½Π΅ ΠΈΠ·ΠΌΠ΅Π½ΠΈΠ»Π°ΡΡ. Π‘ΠΎΠΎΡΠ²Π΅ΡΡΡΠ²ΡΡΡΠΈΠΉ ΠΊΠΎΠ΄ Π² Python 1.5.2 Π²ΡΠ³Π»ΡΠ΄ΠΈΡ ΠΏΡΠ°ΠΊΡΠΈΡΠ΅ΡΠΊΠΈ ΡΠ°ΠΊ ΠΆΠ΅, ΠΊΠ°ΠΊ Π² Python 3.0. Π― Π½Π΅ Π·Π½Π°Ρ, Π±ΡΠ»ΠΎ Π»ΠΈ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ GIL Π΄ΠΎΡΡΠ°ΡΠΎΡΠ½ΠΎ Ρ ΠΎΡΠΎΡΠΎ ΠΈΠ·ΡΡΠ΅Π½ΠΎ (ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎ Π½Π° ΠΌΠ½ΠΎΠ³ΠΎΡΠ΄Π΅ΡΠ½ΡΡ ΠΏΡΠΎΡΠ΅ΡΡΠΎΡΠ°Ρ ). ΠΠΎΠ»Π΅Π·Π½Π΅Π΅ ΡΠ΄Π°Π»ΠΈΡΡ GIL Π²ΠΎΠΎΠ±ΡΠ΅, ΡΠ΅ΠΌ ΠΈΠ·ΠΌΠ΅Π½ΡΡΡ Π΅Π³ΠΎ. ΠΠ½Π΅ ΠΊΠ°ΠΆΠ΅ΡΡΡ, ΡΡΠΎΡ ΠΏΡΠ΅Π΄ΠΌΠ΅Ρ ΡΡΠ΅Π±ΡΠ΅Ρ Π΄Π°Π»ΡΠ½Π΅ΠΉΡΠ΅Π³ΠΎ ΠΈΠ·ΡΡΠ΅Π½ΠΈΡ. ΠΡΠ»ΠΈ GIL ΠΎΡΡΠ°Π΅ΡΡΡ Ρ Π½Π°ΠΌΠΈ, ΡΡΠΎΠΈΡ ΠΈΡΠΏΡΠ°Π²ΠΈΡΡ Π΅Π³ΠΎ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅.
ΠΠ°ΠΊ ΠΆΠ΅ Π²ΡΡ-ΡΠ°ΠΊΠΈ ΠΈΠ·Π±Π°Π²ΠΈΡΡΡΡ ΠΎΡ ΡΡΠΎΠΉ ΠΏΡΠΎΠ±Π»Π΅ΠΌΡ? Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ Π½Π΅ΡΠΊΠΎΠ»ΡΠΊΠΎ ΡΠΌΡΡΠ½ΡΡ ΠΈΠ΄Π΅ΠΉ, Π½ΠΎ Π²ΡΠ΅ ΠΎΠ½ΠΈ Β«ΡΠ»ΠΎΠΆΠ½ΡΠ΅Β». ΠΡΠΆΠ½ΠΎ, ΡΡΠΎΠ±Ρ Π² Python ΠΏΠΎΡΠ²ΠΈΠ»ΡΡ ΡΠ²ΠΎΠΉ ΡΠΎΠ±ΡΡΠ²Π΅Π½Π½ΡΠΉ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅Ρ ΠΏΠΎΡΠΎΠΊΠΎΠ² (ΠΈΠ»ΠΈ Ρ ΠΎΡΡ Π±Ρ ΠΌΠ΅Ρ Π°Π½ΠΈΠ·ΠΌ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΎΠ²ΠΈΡ Ρ Π΄ΠΈΡΠΏΠ΅ΡΡΠ΅ΡΠΎΠΌ ΠΠ‘). ΠΠΎ ΡΡΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ Π½Π΅ΡΡΠΈΠ²ΠΈΠ°Π»ΡΠ½ΠΎΠ³ΠΎ Π²Π·Π°ΠΈΠΌΠΎΠ΄Π΅ΠΉΡΡΠ²ΠΈΡ ΠΌΠ΅ΠΆΠ΄Ρ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠΎΠΌ, ΠΏΠ»Π°Π½ΠΈΡΠΎΠ²ΡΠΈΠΊΠΎΠΌ ΠΠ‘, Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΎΠΉ ΠΏΠΎΡΠΎΠΊΠΎΠ² ΠΈ, ΡΡΠΎ ΡΠ°ΠΌΠΎΠ΅ ΡΡΡΠ°ΡΠ½ΠΎΠ΅, ΠΌΠΎΠ΄ΡΠ»ΡΠΌΠΈ C-ΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΠΉ.
Π‘ΡΠΎΠΈΡ Π»ΠΈ ΠΎΠ½ΠΎ ΡΠΎΠ³ΠΎ? ΠΡΠΏΡΠ°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΡ GIL ΡΠ΄Π΅Π»Π°Π»ΠΎ Π±Ρ Π²ΡΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΠΎΠΊΠΎΠ² (Π΄Π°ΠΆΠ΅ Ρ GIL) Π±ΠΎΠ»Π΅Π΅ ΠΏΡΠ΅Π΄ΡΠΊΠ°Π·ΡΠ΅ΠΌΡΠΌ ΠΈ ΠΌΠ΅Π½Π΅Π΅ ΡΡΠ΅Π±ΠΎΠ²Π°ΡΠ΅Π»ΡΠ½ΡΠΌ ΠΊ ΡΠ΅ΡΡΡΡΠ°ΠΌ. ΠΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, ΡΠ»ΡΡΡΠΈΡΡΡ ΠΏΡΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡΠ΅Π»ΡΠ½ΠΎΡΡΡ ΠΈ ΡΠΌΠ΅Π½ΡΡΠΈΡΡΡ Π²ΡΠ΅ΠΌΡ ΠΎΡΠΊΠ»ΠΈΠΊΠ° ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ΠΠ°Π΄Π΅ΡΡΡ, ΠΏΡΠΈ ΡΡΠΎΠΌ ΡΠ΄Π°ΡΡΡΡ ΠΈΠ·Π±Π΅ΠΆΠ°ΡΡ ΠΏΠΎΠ»Π½ΠΎΠ³ΠΎ ΠΏΠ΅ΡΠ΅ΠΏΠΈΡΡΠ²Π°Π½ΠΈΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ°.
ΠΠΎΡΠ»Π΅ΡΠ»ΠΎΠ²ΠΈΠ΅ ΠΎΡ ΠΏΠ΅ΡΠ΅Π²ΠΎΠ΄ΡΠΈΠΊΠ°
ΠΡΠΈΠ³ΠΈΠ½Π°Π» Π±ΡΠ» ΠΎΡΠΎΡΠΌΠ»Π΅Π½ ΠΊΠ°ΠΊ ΠΏΡΠ΅Π·Π΅Π½ΡΠ°ΡΠΈΡ, ΠΏΠΎΡΡΠΎΠΌΡ ΠΌΠ½Π΅ ΠΏΡΠΈΡΠ»ΠΎΡΡ Π½Π΅ΠΌΠ½ΠΎΠ³ΠΎ ΠΈΠ·ΠΌΠ΅Π½ΠΈΡΡ ΠΏΠΎΡΡΠ΄ΠΎΠΊ ΠΏΠΎΠ²Π΅ΡΡΠ²ΠΎΠ²Π°Π½ΠΈΡ, ΡΡΠΎΠ±Ρ ΡΡΠ°ΡΡΡ Π±ΡΠ»ΠΎ Π»Π΅Π³ΡΠ΅ ΡΠΈΡΠ°ΡΡ. Π’Π°ΠΊΠΆΠ΅ Ρ ΠΈΡΠΊΠ»ΡΡΠΈΠ» ΡΡΠ°ΡΡΠΈΡΠΎΠ²ΠΊΠΈ ΡΠ°Π±ΠΎΡΡ ΠΈΠ½ΡΠ΅ΡΠΏΡΠ΅ΡΠ°ΡΠΎΡΠ° β Π΅ΡΠ»ΠΈ Π²Π°ΠΌ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΠΎ, ΠΏΠΎΡΠΌΠΎΡΡΠΈΡΠ΅ Π² ΠΎΡΠΈΠ³ΠΈΠ½Π°Π»Π΅.
Π₯Π°Π±ΡΠ°Π»ΡΠ΄ΠΈ, ΠΏΠΎΡΠΎΠ²Π΅ΡΡΠΉΡΠ΅ ΠΈΠ½ΡΠ΅ΡΠ΅ΡΠ½ΡΠ΅ Π°Π½Π³Π»ΠΈΠΉΡΠΊΠΈΠ΅ ΡΡΠ°ΡΡΠΈ ΠΏΠΎ Python, ΠΊΠΎΡΠΎΡΡΠ΅ Π±ΡΠ»ΠΎ Π±Ρ Ρ ΠΎΡΠΎΡΠΎ ΠΏΠ΅ΡΠ΅Π²Π΅ΡΡΠΈ. Π£ ΠΌΠ΅Π½Ρ Π΅ΡΡΡ Π½Π° ΠΏΡΠΈΠΌΠ΅ΡΠ΅ ΠΏΠ°ΡΠ° ΡΡΠ°ΡΠ΅ΠΉ, Π½ΠΎ Ρ ΠΎΡΠ΅ΡΡΡ Π΅ΡΠ΅ Π²Π°ΡΠΈΠ°Π½ΡΠΎΠ².