πŸ•·οΈ Crawler Inspector

URL Lookup

Direct Parameter Lookup

Raw Queries and Responses

1. Shard Calculation

Query:
Response:
Calculated Shard: 134 (from laksa015)

2. Crawled Status Check

Query:
Response:

3. Robots.txt Check

Query:
Response:

4. Spam/Ban Check

Query:
Response:

5. Seen Status Check

ℹ️ Skipped - page is already crawled

πŸ“„
INDEXABLE
βœ…
CRAWLED
2 months ago
πŸ€–
ROBOTS ALLOWED

Page Info Filters

FilterStatusConditionDetails
HTTP statusPASSdownload_http_code = 200HTTP 200
Age cutoffPASSdownload_stamp > now() - 6 MONTH2.3 months ago
History dropPASSisNull(history_drop_reason)No drop reason
Spam/banPASSfh_dont_index != 1 AND ml_spam_score = 0ml_spam_score=0
CanonicalPASSmeta_canonical IS NULL OR = '' OR = src_unparsedNot set

Page Details

PropertyValue
URLhttps://habr.com/ru/companies/ruvds/articles/418823/
Last Crawled2026-02-10 23:21:42 (2 months ago)
First Indexed2023-05-06 09:39:24 (2 years ago)
HTTP Status Code200
Meta TitlePython β€” это ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. ΠŸΠΎΡ‡Π΅ΠΌΡƒ? / Π₯Π°Π±Ρ€
Meta DescriptionΠ’ послСднСС врСмя ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ рост популярности языка программирования Python. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² DevOps, Π² Π°Π½Π°Π»ΠΈΠ·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π² Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, Π² сфСрС бСзопасности ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… областях. Но Π²ΠΎΡ‚...
Meta Canonicalnull
Boilerpipe Text
ВрСмя Π½Π° ΠΏΡ€ΠΎΡ‡Ρ‚Π΅Π½ΠΈΠ΅ 9 ΠΌΠΈΠ½ ΠžΡ…Π²Π°Ρ‚ ΠΈ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ 92K ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π’ послСднСС врСмя ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ рост популярности языка программирования Python. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² DevOps, Π² Π°Π½Π°Π»ΠΈΠ·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π² Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, Π² сфСрС бСзопасности ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… областях. Но Π²ΠΎΡ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒβ€¦ Π—Π΄Π΅ΡΡŒ этому языку ΠΏΠΎΡ…Π²Π°ΡΡ‚Π°Ρ‚ΡŒΡΡ Π½Π΅Ρ‡Π΅ΠΌ. Автор ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ сСгодня ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ, Ρ€Π΅ΡˆΠΈΠ» Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΌΠ΅Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Python ΠΈ Π½Π°ΠΉΡ‚ΠΈ срСдства Π΅Π³ΠΎ ускорСния. ΠžΠ±Ρ‰ΠΈΠ΅ полоТСния Как Java, Π² ΠΏΠ»Π°Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, соотносится с C ΠΈΠ»ΠΈ C++? Как ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ C# ΠΈ Python? ΠžΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° эти вопросы ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎ зависят ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… исслСдоватСлСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. НС сущСствуСт идСального Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ°, Π½ΠΎ, изучая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… языках, Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎΠΉ ΠΎΡ‚ΠΏΡ€Π°Π²Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ The Computer Language Benchmarks Game. Π― ΡΡΡ‹Π»Π°ΡŽΡΡŒ Π½Π° The Computer Language Benchmarks Game ΡƒΠΆΠ΅ большС дСсяти Π»Π΅Ρ‚. Python, Π² сравнСнии с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ языками, Ρ‚Π°ΠΊΠΈΠΌΠΈ, ΠΊΠ°ΠΊ Java, C#, Go, JavaScript, C++, являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· самых ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ… . Бюда входят языки, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ JIT -компиляция (C#, Java), ΠΈ AOT -компиляция (C, C++), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ языки, Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ JavaScript. Π’ΡƒΡ‚ ΠΌΠ½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ говоря Β«PythonΒ», я имСю Π² Π²ΠΈΠ΄Ρƒ ΡΡ‚Π°Π»ΠΎΠ½Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python β€” CPython. Π’ этом ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅ ΠΌΡ‹ коснёмся ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ. БобствСнно говоря, здСсь ΠΌΠ½Π΅ хочСтся Π½Π°ΠΉΡ‚ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° вопрос ΠΎ Ρ‚ΠΎΠΌ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Python трСбуСтся Π² 2-10 Ρ€Π°Π· большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ языкам, Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ сопоставимых Π·Π°Π΄Π°Ρ‡, ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ быстрСС. Π’ΠΎΡ‚ основныС Ρ‚Π΅ΠΎΡ€ΠΈΠΈ, ΠΏΡ‹Ρ‚Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Python: ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° этого β€” Π² GIL (Global Interpreter Lock, глобальная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°). ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Python β€” это ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ, Π° Π½Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ язык. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° β€” Π² динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ эти ΠΈΠ΄Π΅ΠΈ ΠΈ попытаСмся Π½Π°ΠΉΡ‚ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° вопрос ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ сильнСС всСго ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ влияниС Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. GIL Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ многоядСрными процСссорами, ΠΈΠ½ΠΎΠ³Π΄Π° Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΈ многопроцСссорныС систСмы. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всю эту Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΌΠΎΡ‰ΡŒ, опСрационная систСма примСняСт Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ структуры, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ процСссы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” процСсс Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Chrome) ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ мноТСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ процСсс особСнно сильно нуТдаСтся Π² рСсурсах процСссора, Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькими ядрами, Ρ‡Ρ‚ΠΎ позволяСт Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Ρƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ быстрСС Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π²ΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ. НапримСр, Ρƒ ΠΌΠΎΠ΅Π³ΠΎ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Chrome, Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° я это ΠΏΠΈΡˆΡƒ, имССтся 44 ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π’ΡƒΡ‚ стоит ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ структура ΠΈ API систСмы Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ различаСтся Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах, основанных Π½Π° Posix (Mac OS, Linux), ΠΈ Π² ОБ сСмСйства Windows. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, занимаСтся ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Если Ρ€Π°Π½ΡŒΡˆΠ΅ Π²Ρ‹ Π½Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΈΡΡŒ с ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Ρ‚ΠΎ сСйчас Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ (locks). Бмысл Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ систСмы, ΠΊΠΎΠ³Π΄Π°, Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΠ΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² памяти, доступ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ области памяти (для чтСния ΠΈΠ»ΠΈ измСнСния) Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Когда ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ CPython создаёт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠ½ выдСляСт ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π° Π·Π°Ρ‚Π΅ΠΌ подсчитываСт количСство ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ссылок Π½Π° эти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Π­Ρ‚Π° концСпция извСстна ΠΊΠ°ΠΊ подсчёт ссылок (reference counting). Если число ссылок равняСтся Π½ΡƒΠ»ΡŽ, Ρ‚ΠΎΠ³Π΄Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ участок памяти освобоТдаСтся. ИмСнно поэтому, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, созданиС Β«Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…Β» ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, скаТСм, Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… областСй видимости Ρ†ΠΈΠΊΠ»ΠΎΠ², Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠΌΡƒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ ΠΎΠ±ΡŠΡ‘ΠΌΠ° памяти, потрСбляСмого ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π‘Π°ΠΌΠΎΠ΅ интСрСсноС начинаСтся Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈ Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ совмСстно ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π° главная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ‚ΡƒΡ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ CPython выполняСт подсчёт ссылок. Π’ΡƒΡ‚ ΠΈ проявляСтся дСйствиС «глобальной Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°Β», которая Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ лишь ΠΎΠ΄Π½Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π·Π° Ρ€Π°Π·, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² имССтся Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. β–ΠšΠ°ΠΊ GIL влияСт Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ? Если Ρƒ нас имССтся ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ Π² ΠΎΠ΄Π½ΠΎΠΌ процСссС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python, Ρ‚ΠΎ GIL Π½ΠΈΠΊΠ°ΠΊ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ влияСт. Если, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ GIL, Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΡ‹ Π½Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠΌ. Если ΠΆΠ΅, Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python, Π½Π°Π΄ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² многопоточности, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ интСнсивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ подсистСму Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΡΠ΅Ρ‚ΡŒΡŽ ΠΈΠ»ΠΈ с диском), Ρ‚ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ послСдствия Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ GIL управляСт ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это выглядит Π² случаС использования Π΄Π²ΡƒΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², интСнсивно Π½Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΡ… процСссов. Визуализация Ρ€Π°Π±ΠΎΡ‚Ρ‹ GIL (взято ΠΎΡ‚ΡΡŽΠ΄Π° ) Если Ρƒ вас имССтся Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, основанноС Π½Π° Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ΅ Django), ΠΈ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ WSGI, Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ запрос ΠΊ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ процСссом ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, Ρƒ нас имССтся лишь 1 Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π° запрос. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python запускаСтся ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… рСализациях WSGI имССтся Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Β«Ρ€Π΅ΠΆΠΈΠΌ Π΄Π΅ΠΌΠΎΠ½Π°Β», ΠΏΡ€ΠΈ использовании ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ процСссы ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ состоянии, Ρ‡Ρ‚ΠΎ позволяСт систСмС быстрСС ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ запросы. β–ΠšΠ°ΠΊ Π²Π΅Π΄ΡƒΡ‚ сСбя Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ Python? Π’ PyPy Π΅ΡΡ‚ΡŒ GIL, ΠΎΠ½ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π² 3 Ρ€Π°Π·Π° быстрСС, Ρ‡Π΅ΠΌ CPython. Π’ Jython Π½Π΅Ρ‚ GIL, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Python Π² Jython прСдставлСны Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Java. Π’Π°ΠΊΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ возмоТности ΠΏΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ JVM. β–ΠšΠ°ΠΊ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π² JavaScript? Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ JavaScript, Ρ‚ΠΎ, Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π½Π°Π΄ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ всС JS-Π΄Π²ΠΈΠΆΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сборки мусора mark-and-sweep . Как ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано, основная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° нСобходимости использования GIL β€” это Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, примСняСмый Π² CPython. Π’ JavaScript Π½Π΅Ρ‚ GIL, ΠΎΠ΄Π½Π°ΠΊΠΎ, JS β€” это ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ язык, поэтому Π² Π½Ρ‘ΠΌ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΈ Π½Π΅ Π½ΡƒΠΆΠ΅Π½. ВмСсто ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния ΠΊΠΎΠ΄Π° Π² JavaScript ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠΈ асинхронного программирования, основанныС Π½Π° Ρ†ΠΈΠΊΠ»Π΅ событий, промисах ΠΈ коллбэках. Π’ Python Π΅ΡΡ‚ΡŒ Π½Π΅Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅, прСдставлСнноС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ asyncio . Python β€” ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ язык МнС часто ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ низкая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Python являСтся слСдствиСм Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ это β€” ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ язык. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ утвСрТдСния основаны Π½Π° Π³Ρ€ΡƒΠ±ΠΎΠΌ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ, Π½Π° самом Π΄Π΅Π»Π΅, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ CPython. Если, Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅, ввСсти ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²Ρ€ΠΎΠ΄Π΅ python myscript.py , Ρ‚ΠΎΠ³Π΄Π° CPython Π½Π°Ρ‡Π½Ρ‘Ρ‚ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ дСйствий, которая Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‡Ρ‚Π΅Π½ΠΈΠΈ, лСксичСском Π°Π½Π°Π»ΠΈΠ·Π΅, парсингС, компиляции, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° скрипта. Если вас ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ подробности β€” взглянитС Π½Π° этот ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π». Для нас, ΠΏΡ€ΠΈ рассмотрСнии этого процСсса, особСнно Π²Π°ΠΆΠ½Ρ‹ΠΌ являСтся Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ здСсь, Π½Π° стадии компиляции, создаётся .pyc -Ρ„Π°ΠΉΠ», ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠ² ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π² Ρ„Π°ΠΉΠ» Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ __pycache__/ , которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈ Π² Python 3, ΠΈ Π² Python 2. ПодобноС примСняСтся Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ написанным Π½Π°ΠΌΠΈ скриптам, Π½ΠΎ ΠΈ ΠΊ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ сторонниС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π½Π΅ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запускаСтся лишь ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·) Python занимаСтся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°. Если ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ это с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ происходит Π² Java ΠΈ Π² C#, окаТСтся, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° Java компилируСтся Π² Β«Intermediate LanguageΒ», ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ ΠΈ выполняСт Π΅Π³ΠΎ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Β«ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ язык» .NET CIL (это Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ .NET Common-Language-Runtime, CLR), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΊ ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, ΠΈ Π² Java ΠΈ Π² C# ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ΠΊΠΈΠΉ Β«ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ язык» ΠΈ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹. ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅ Ρ‚ΠΎΠ³Π΄Π° Python ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π² Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ°Ρ… Π³ΠΎΡ€Π°Π·Π΄ΠΎ Ρ…ΡƒΠ΄ΡˆΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, Ρ‡Π΅ΠΌ Java ΠΈ C#, Ссли всС эти языки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ разновидности Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°? Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ β€” ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π² .NET ΠΈ Π² Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ JIT-компиляция. JIT-компиляция (Just In Time compilation, компиляция Β«Π½Π° Π»Π΅Ρ‚ΡƒΒ» ΠΈΠ»ΠΈ Β«Ρ‚ΠΎΡ‡Π½ΠΎ Π² срок») Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ наличия ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ языка для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π½Π° Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ (ΠΊΠ°Π΄Ρ€Ρ‹). БистСмы AOT-компиляции (Ahead Of Time compilation, компиляция ΠΏΠ΅Ρ€Π΅Π΄ исполнСниСм) спроСктированы Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ начнётся взаимодСйствиС этого ΠΊΠΎΠ΄Π° с систСмой. Π‘Π°ΠΌΠΎ ΠΏΠΎ сСбС использованиС JIT Π½Π΅ ускоряСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚, ΠΊΠ°ΠΊ ΠΈ Π² Python, Π½Π΅ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°. Однако JIT позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° Π² процСссС Π΅Π³ΠΎ выполнСния. Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ JIT-ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ способСн Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π½Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ части прилоТСния (Ρ‚Π°ΠΊΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ прилоТСния Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Β«hot spotΒ») ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π°, Π·Π°ΠΌΠ΅Π½ΠΈΠ² ΠΈΡ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ, Ρ‡Π΅ΠΌ Ρ‚Π΅, Ρ‡Ρ‚ΠΎ использовались Ρ€Π°Π½Π΅Π΅. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ снова ΠΈ снова выполняСт Π½Π΅ΠΊΠΈΠ΅ дСйствия, подобная оптимизация способна Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΡ… дСйствий. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Java ΠΈ C# β€” это языки со строгой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, поэтому ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎ ΠΊΠΎΠ΄Π΅ большС ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. JIT-компилятор Π΅ΡΡ‚ΡŒ Π² PyPy, ΠΈ, ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано, эта рСализация ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python Π³ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС, Ρ‡Π΅ΠΌ CPython. БвСдСния, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ сравнСния Ρ€Π°Π·Π½Ρ‹Ρ… ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ² Python, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² этом ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅. β–ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π² CPython Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ JIT-компилятор? Π£ JIT-компиляторов Π΅ΡΡ‚ΡŒ ΠΈ нСдостатки. Один ΠΈΠ· Π½ΠΈΡ… β€” врСмя запуска. CPython ΠΈ Ρ‚Π°ΠΊ запускаСтся ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π° PyPy Π² 2-3 Ρ€Π°Π·Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ CPython. Π”Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя запуска JVM β€” это Ρ‚ΠΎΠΆΠ΅ извСстный Ρ„Π°ΠΊΡ‚. CLR .NET ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π·Π°ΠΏΡƒΡΠΊΠ°ΡΡΡŒ Π² Ρ…ΠΎΠ΄Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ систСмы, Π½ΠΎ Ρ‚ΡƒΡ‚ Π½Π°Π΄ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈ CLR, ΠΈ Ρ‚Π° опСрационная систСма, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ запускаСтся CLR, Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ. Если Ρƒ вас имССтся ΠΎΠ΄ΠΈΠ½ процСсс Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя, ΠΏΡ€ΠΈ этом Π² Ρ‚Π°ΠΊΠΎΠΌ процСссС имССтся ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ содСрТит интСнсивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ участки, Ρ‚ΠΎΠ³Π΄Π° Π²Π°ΠΌ стоит ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ JIT-компилятор. Однако, CPython β€” это рСализация ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅, с использованиСм Python, прилоТСния ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ оТидания запуска JIT-компилятора ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ запускС этого прилоТСния сильно Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ. CPython пытаСтся ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большСго количСства Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² использования Python. НапримСр, сущСствуСт возмоТности ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ JIT-компилятора ΠΊ Python, ΠΏΡ€Π°Π²Π΄Π°, ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ , Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ рСализуСтся эта идСя, развиваСтся Π½Π΅ особСнно Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python, ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ использовании JIT-компилятора β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ PyPy. Python β€” динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык Π’ статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках, ΠΏΡ€ΠΈ объявлСнии ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Ρ‚ΠΈΠΏΡ‹. Π‘Ρ€Π΅Π΄ΠΈ Ρ‚Π°ΠΊΠΈΡ… языков ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ C, C++, Java, C#, Go. Π’ динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках понятиС Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ смысл, Π½ΠΎ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ являСтся динамичСским. a = 1 a = "foo" Π’ этом ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Python сначала создаёт ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ a , ΠΏΠΎΡ‚ΠΎΠΌ β€” Π²Ρ‚ΠΎΡ€ΡƒΡŽ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΈΠΌΠ΅ΡŽΡ‰ΡƒΡŽ Ρ‚ΠΈΠΏ str , ΠΈ освобоТдаСт ΠΏΠ°ΠΌΡΡ‚ΡŒ, которая Π±Ρ‹Π»Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ a . ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° языках с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ Π½Π° языках со статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ, Ρ‚Π°ΠΊΠΈΠ΅ языки созданы Π½Π΅ ΠΏΠΎ Ρ‡ΡŒΠ΅ΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΡ‚ΠΈ. ΠŸΡ€ΠΈ ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΡƒΡ‡Ρ‚Π΅Π½Ρ‹ особСнности Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… систСм. Всё, Ρ‡Ρ‚ΠΎ написано Π² тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² ΠΈΡ‚ΠΎΠ³Π΅, сводится ΠΊ инструкциям процСссора. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎΠΆΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ ΠΊ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌ структурам. Python выполняСт ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ прСобразования автоматичСски, программист этих процСссов Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚, ΠΈ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… прСобразованиях Π΅ΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ нСобходимости ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΈ Π΅Ρ‘ объявлСнии β€” это Π½Π΅ Ρ‚Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ языка, которая Π΄Π΅Π»Π°Π΅Ρ‚ Python ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ. АрхитСктура языка позволяСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ динамичСским практичСски всё, Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. НапримСр, Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ Β«ΠΎΠ±Π΅Π·ΡŒΡΠ½ΡŒΠΈΡ… ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉΒ» Π² ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌ систСмным Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ. Π’ Python Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ практичСски всё. ИмСнно Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Python Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ услоТняСт ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эту идСю, я ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ инструмСнтом для трассировки систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π² MacOS, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся DTrace. Π’ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΌ дистрибутивС CPython Π½Π΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ DTrace, поэтому CPython Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ настройками. Π’ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вСрсия 3.6.6. Π˜Ρ‚Π°ΠΊ, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ дСйствий: wget https://github.com/python/cpython/archive/v3.6.6.zip unzip v3.6.6.zip cd v3.6.6 ./configure --with-dtrace make Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ python.exe , ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ DTRace для трассировки ΠΊΠΎΠ΄Π°. Об использовании DTrace с Python ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ здСсь . А Π²ΠΎΡ‚ Ρ‚ΡƒΡ‚ ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ скрипты для измСрСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ DTrace Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Python-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π‘Ρ€Π΅Π΄ΠΈ Π½ΠΈΡ… β€” ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, врСмя использования процСссора, свСдСния ΠΎ систСмных Π²Ρ‹Π·ΠΎΠ²Π°Ρ… ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ dtrace : sudo dtrace -s toolkit/<tracer>.d -c β€˜../cpython/python.exe script.py’ А Π²ΠΎΡ‚ ΠΊΠ°ΠΊ срСдство трассировки py_callflow ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. Врассировка с использованиСм DTrace Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠΌ Π½Π° вопрос ΠΎ Ρ‚ΠΎΠΌ, влияСт Π»ΠΈ динамичСская типизация Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Python. Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сообраТСния ΠΏΠΎ этому ΠΏΠΎΠ²ΠΎΠ΄Ρƒ: ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈ конвСрсия Ρ‚ΠΈΠΏΠΎΠ² β€” ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ тяТёлыС. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° выполняСтся ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π΅Ρ‘ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ запись, производится ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠ°. Π―Π·Ρ‹ΠΊ, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒΡŽ, слоТно ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ языки Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ быстрСС Python, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΈΠ΄ΡƒΡ‚ Π½Π° Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Π΅ компромиссы, выбирая ΠΌΠ΅ΠΆΠ΄Ρƒ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒΡŽ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ Cython ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Python ΠΈ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² этом ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅ , ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ 84-ΠΊΡ€Π°Ρ‚Π½ΠΎΠΌΡƒ росту ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² сравнСнии с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Python. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° этот ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ. Π˜Ρ‚ΠΎΠ³ΠΈ ΠŸΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ нСвысокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Python являСтся Π΅Π³ΠΎ динамичСская ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π° ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ инструмСнт для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Π΅ΠΉΡˆΠΈΡ… Π·Π°Π΄Π°Ρ‡. Для достиТСния Ρ‚Π΅Ρ… ΠΆΠ΅ Ρ†Π΅Π»Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠΈΡΠΊΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ инструмСнты. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΉΡ‚ΠΈ ΠΈΡ… удастся, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ β€” Π½Π΅Ρ‚. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, написанныС Π½Π° Python, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ возмоТности ΠΏΠΎ асинхронному Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΊΠΎΠ΄Π°, инструмСнты профилирования, ΠΈ β€” ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ подбирая ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€. Π’Π°ΠΊ, для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, врСмя запуска ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Π²Π°ΠΆΠ½ΠΎ, Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΈΠ³Ρ€Π°Ρ‚ΡŒ ΠΎΡ‚ использования JIT-компилятора, рассмотритС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования PyPy. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° максимальная ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ ограничСниям статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ β€” взглянитС Π½Π° Cython. Π£Π²Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ! Как Π²Ρ‹ Ρ€Π΅ΡˆΠ°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ нСвысокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Python?
Markdown
[ВсС ΠΏΠΎΡ‚ΠΎΠΊΠΈ](https://habr.com/ru/articles/) [Π’ΠΎΠΉΡ‚ΠΈ](https://habr.com/kek/v1/auth/habrahabr/?back=/ru/companies/ruvds/articles/418823/&hl=ru) [![](https://habrastorage.org/getpro/habr/branding/937/973/199/9379731999358877e1a6e6fa2423bcc8.png)](https://ruvds.com/ru-rub?utm_source=habr&utm_medium=banner&utm_campaign=promo&utm_content=link&?erid=LjN8KAR3S) [![](https://habrastorage.org/getpro/habr/company/608/f02/206/608f0220675e20da793aa1974a1a0a2e.png)](https://habr.com/ru/companies/ruvds/profile/) 3301\.3 ΠžΠ±Ρ‰ΠΈΠΉ Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ [RUVDS.com](https://habr.com/ru/companies/ruvds/profile/) VDS/VPS-хостинг. Π‘ΠΊΠΈΠ΄ΠΊΠ° 15% ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ **HABR15** ΠŸΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ [![](https://habrastorage.org/r/w48/getpro/habr/avatars/1b8/7ff/39c/1b87ff39ce6dfc7224cb45ab05384ecc.png)](https://habr.com/ru/users/ru_vds/) [ru\_vds](https://habr.com/ru/users/ru_vds/) 1 Π°Π²Π³ 2018 Π² 09:26 # Python β€” это ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ. ΠŸΠΎΡ‡Π΅ΠΌΡƒ? 9 ΠΌΠΈΠ½ 92K [Π‘Π»ΠΎΠ³ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ RUVDS.com](https://habr.com/ru/companies/ruvds/articles/)[Python \*](https://habr.com/ru/hubs/python/) [Π’Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ° \*](https://habr.com/ru/hubs/webdev/) ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ [Автор ΠΎΡ€ΠΈΠ³ΠΈΠ½Π°Π»Π°: Anthony Shaw](https://hackernoon.com/why-is-python-so-slow-e5074b6fe55b) Π’ послСднСС врСмя ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ рост популярности языка программирования Python. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² DevOps, Π² Π°Π½Π°Π»ΠΈΠ·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π² Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, Π² сфСрС бСзопасности ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… областях. Но Π²ΠΎΡ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒβ€¦ Π—Π΄Π΅ΡΡŒ этому языку ΠΏΠΎΡ…Π²Π°ΡΡ‚Π°Ρ‚ΡŒΡΡ Π½Π΅Ρ‡Π΅ΠΌ. Автор ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ сСгодня ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ, Ρ€Π΅ΡˆΠΈΠ» Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΌΠ΅Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Python ΠΈ Π½Π°ΠΉΡ‚ΠΈ срСдства Π΅Π³ΠΎ ускорСния. [![](https://habrastorage.org/r/w1560/webt/tv/zp/uz/tvzpuzzfhsgdyegpe8ri3pbl3mw.jpeg)](https://habr.com/company/ruvds/blog/418823/) ## ΠžΠ±Ρ‰ΠΈΠ΅ полоТСния Как Java, Π² ΠΏΠ»Π°Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, соотносится с C ΠΈΠ»ΠΈ C++? Как ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ C\# ΠΈ Python? ΠžΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° эти вопросы ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎ зависят ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… исслСдоватСлСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. НС сущСствуСт идСального Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ°, Π½ΠΎ, изучая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… языках, Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎΠΉ [ΠΎΡ‚ΠΏΡ€Π°Π²Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ](http://algs4.cs.princeton.edu/faq/) ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ The Computer Language Benchmarks Game. Π― ΡΡΡ‹Π»Π°ΡŽΡΡŒ Π½Π° The Computer Language Benchmarks Game ΡƒΠΆΠ΅ большС дСсяти Π»Π΅Ρ‚. Python, Π² сравнСнии с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ языками, Ρ‚Π°ΠΊΠΈΠΌΠΈ, ΠΊΠ°ΠΊ Java, C\#, Go, JavaScript, C++, являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· [самых ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ…](https://benchmarksgame-team.pages.debian.net/benchmarksgame/faster/python.html). Бюда входят языки, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ [JIT](https://en.wikipedia.org/wiki/Just-in-time_compilation)\-компиляция (C\#, Java), ΠΈ [AOT](https://en.wikipedia.org/wiki/Ahead-of-time_compilation)\-компиляция (C, C++), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ языки, Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ JavaScript. Π’ΡƒΡ‚ ΠΌΠ½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ говоря Β«PythonΒ», я имСю Π² Π²ΠΈΠ΄Ρƒ ΡΡ‚Π°Π»ΠΎΠ½Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python β€” CPython. Π’ этом ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅ ΠΌΡ‹ коснёмся ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ. БобствСнно говоря, здСсь ΠΌΠ½Π΅ хочСтся Π½Π°ΠΉΡ‚ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° вопрос ΠΎ Ρ‚ΠΎΠΌ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Python трСбуСтся Π² 2-10 Ρ€Π°Π· большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ языкам, Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ сопоставимых Π·Π°Π΄Π°Ρ‡, ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ быстрСС. Π’ΠΎΡ‚ основныС Ρ‚Π΅ΠΎΡ€ΠΈΠΈ, ΠΏΡ‹Ρ‚Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Python: - ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° этого β€” Π² GIL (Global Interpreter Lock, глобальная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°). - ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Python β€” это ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ, Π° Π½Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ язык. - ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° β€” Π² динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ эти ΠΈΠ΄Π΅ΠΈ ΠΈ попытаСмся Π½Π°ΠΉΡ‚ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° вопрос ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ сильнСС всСго ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ влияниС Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ## GIL Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ многоядСрными процСссорами, ΠΈΠ½ΠΎΠ³Π΄Π° Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΈ многопроцСссорныС систСмы. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всю эту Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΌΠΎΡ‰ΡŒ, опСрационная систСма примСняСт Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ структуры, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ процСссы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” процСсс Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Chrome) ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ мноТСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ процСсс особСнно сильно нуТдаСтся Π² рСсурсах процСссора, Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькими ядрами, Ρ‡Ρ‚ΠΎ позволяСт Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Ρƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ быстрСС Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π²ΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ. НапримСр, Ρƒ ΠΌΠΎΠ΅Π³ΠΎ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Chrome, Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° я это ΠΏΠΈΡˆΡƒ, имССтся 44 ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π’ΡƒΡ‚ стоит ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ структура ΠΈ API систСмы Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ различаСтся Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах, основанных Π½Π° Posix (Mac OS, Linux), ΠΈ Π² ОБ сСмСйства Windows. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, занимаСтся ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Если Ρ€Π°Π½ΡŒΡˆΠ΅ Π²Ρ‹ Π½Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΈΡΡŒ с ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Ρ‚ΠΎ сСйчас Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ (locks). Бмысл Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ систСмы, ΠΊΠΎΠ³Π΄Π°, Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΠ΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² памяти, доступ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ области памяти (для чтСния ΠΈΠ»ΠΈ измСнСния) Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Когда ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ CPython создаёт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠ½ выдСляСт ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π° Π·Π°Ρ‚Π΅ΠΌ подсчитываСт количСство ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ссылок Π½Π° эти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Π­Ρ‚Π° концСпция извСстна ΠΊΠ°ΠΊ подсчёт ссылок (reference counting). Если число ссылок равняСтся Π½ΡƒΠ»ΡŽ, Ρ‚ΠΎΠ³Π΄Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ участок памяти освобоТдаСтся. ИмСнно поэтому, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, созданиС Β«Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…Β» ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, скаТСм, Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… областСй видимости Ρ†ΠΈΠΊΠ»ΠΎΠ², Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠΌΡƒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ ΠΎΠ±ΡŠΡ‘ΠΌΠ° памяти, потрСбляСмого ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π‘Π°ΠΌΠΎΠ΅ интСрСсноС начинаСтся Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈ Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ совмСстно ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π° главная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ‚ΡƒΡ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ CPython выполняСт подсчёт ссылок. Π’ΡƒΡ‚ ΠΈ проявляСтся дСйствиС «глобальной Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°Β», которая Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ лишь ΠΎΠ΄Π½Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π·Π° Ρ€Π°Π·, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² имССтся Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ### β–ΠšΠ°ΠΊ GIL влияСт Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ? Если Ρƒ нас имССтся ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ Π² ΠΎΠ΄Π½ΠΎΠΌ процСссС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python, Ρ‚ΠΎ GIL Π½ΠΈΠΊΠ°ΠΊ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ влияСт. Если, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ GIL, Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΡ‹ Π½Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠΌ. Если ΠΆΠ΅, Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python, Π½Π°Π΄ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² многопоточности, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ интСнсивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ подсистСму Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΡΠ΅Ρ‚ΡŒΡŽ ΠΈΠ»ΠΈ с диском), Ρ‚ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ послСдствия Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ GIL управляСт ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это выглядит Π² случаС использования Π΄Π²ΡƒΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², интСнсивно Π½Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΡ… процСссов. ![](https://habrastorage.org/r/w1560/getpro/habr/post_images/f9e/379/f47/f9e379f4724ba48881f53b489ca5ed1d.png) *Визуализация Ρ€Π°Π±ΠΎΡ‚Ρ‹ GIL (взято [ΠΎΡ‚ΡΡŽΠ΄Π°](http://dabeaz.blogspot.com/2010/01/python-gil-visualized.html))* Если Ρƒ вас имССтся Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, основанноС Π½Π° Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ΅ Django), ΠΈ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ WSGI, Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ запрос ΠΊ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ процСссом ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, Ρƒ нас имССтся лишь 1 Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π° запрос. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python запускаСтся ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… рСализациях WSGI имССтся Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Β«Ρ€Π΅ΠΆΠΈΠΌ Π΄Π΅ΠΌΠΎΠ½Π°Β», ΠΏΡ€ΠΈ использовании ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ [процСссы ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°](https://www.slideshare.net/GrahamDumpleton/secrets-of-a-wsgi-master) ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ состоянии, Ρ‡Ρ‚ΠΎ позволяСт систСмС быстрСС ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ запросы. ### β–ΠšΠ°ΠΊ Π²Π΅Π΄ΡƒΡ‚ сСбя Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ Python? Π’ [PyPy](http://doc.pypy.org/en/latest/faq.html#does-pypy-have-a-gil-why) Π΅ΡΡ‚ΡŒ GIL, ΠΎΠ½ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π² 3 Ρ€Π°Π·Π° быстрСС, Ρ‡Π΅ΠΌ CPython. Π’ [Jython](http://www.jython.org/jythonbook/en/1.0/Concurrency.html#no-global-interpreter-lock) Π½Π΅Ρ‚ GIL, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Python Π² Jython прСдставлСны Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Java. Π’Π°ΠΊΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ возмоТности ΠΏΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ JVM. ### β–ΠšΠ°ΠΊ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π² JavaScript? Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ JavaScript, Ρ‚ΠΎ, Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π½Π°Π΄ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ всС JS-Π΄Π²ΠΈΠΆΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сборки мусора [mark-and-sweep](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management). Как ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано, основная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° нСобходимости использования GIL β€” это Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, примСняСмый Π² CPython. Π’ JavaScript Π½Π΅Ρ‚ GIL, ΠΎΠ΄Π½Π°ΠΊΠΎ, JS β€” это ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ язык, поэтому Π² Π½Ρ‘ΠΌ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΈ Π½Π΅ Π½ΡƒΠΆΠ΅Π½. ВмСсто ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния ΠΊΠΎΠ΄Π° Π² JavaScript ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠΈ асинхронного программирования, основанныС Π½Π° Ρ†ΠΈΠΊΠ»Π΅ событий, промисах ΠΈ коллбэках. Π’ Python Π΅ΡΡ‚ΡŒ Π½Π΅Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅, прСдставлСнноС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ `asyncio`. ## Python β€” ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ язык МнС часто ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ низкая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Python являСтся слСдствиСм Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ это β€” ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ язык. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ утвСрТдСния основаны Π½Π° Π³Ρ€ΡƒΠ±ΠΎΠΌ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ, Π½Π° самом Π΄Π΅Π»Π΅, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ CPython. Если, Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅, ввСсти ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²Ρ€ΠΎΠ΄Π΅ `python myscript.py`, Ρ‚ΠΎΠ³Π΄Π° CPython Π½Π°Ρ‡Π½Ρ‘Ρ‚ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ дСйствий, которая Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‡Ρ‚Π΅Π½ΠΈΠΈ, лСксичСском Π°Π½Π°Π»ΠΈΠ·Π΅, парсингС, компиляции, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° скрипта. Если вас ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ подробности β€” взглянитС Π½Π° [этот](https://hackernoon.com/modifying-the-python-language-in-7-minutes-b94b0a99ce14) ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π». Для нас, ΠΏΡ€ΠΈ рассмотрСнии этого процСсса, особСнно Π²Π°ΠΆΠ½Ρ‹ΠΌ являСтся Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ здСсь, Π½Π° стадии компиляции, создаётся `.pyc`\-Ρ„Π°ΠΉΠ», ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠ² ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π² Ρ„Π°ΠΉΠ» Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ `__pycache__/`, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈ Π² Python 3, ΠΈ Π² Python 2. ПодобноС примСняСтся Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ написанным Π½Π°ΠΌΠΈ скриптам, Π½ΠΎ ΠΈ ΠΊ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ сторонниС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π½Π΅ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запускаСтся лишь ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·) Python занимаСтся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°. Если ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ это с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ происходит Π² Java ΠΈ Π² C\#, окаТСтся, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° Java компилируСтся Π² Β«Intermediate LanguageΒ», ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ ΠΈ выполняСт Π΅Π³ΠΎ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Β«ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ язык» .NET CIL (это Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ .NET Common-Language-Runtime, CLR), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΊ ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, ΠΈ Π² Java ΠΈ Π² C\# ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ΠΊΠΈΠΉ Β«ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ язык» ΠΈ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹. ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅ Ρ‚ΠΎΠ³Π΄Π° Python ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π² Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ°Ρ… Π³ΠΎΡ€Π°Π·Π΄ΠΎ Ρ…ΡƒΠ΄ΡˆΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, Ρ‡Π΅ΠΌ Java ΠΈ C\#, Ссли всС эти языки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ разновидности Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°? Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ β€” ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π² .NET ΠΈ Π² Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ JIT-компиляция. JIT-компиляция (Just In Time compilation, компиляция Β«Π½Π° Π»Π΅Ρ‚ΡƒΒ» ΠΈΠ»ΠΈ Β«Ρ‚ΠΎΡ‡Π½ΠΎ Π² срок») Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ наличия ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ языка для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π½Π° Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ (ΠΊΠ°Π΄Ρ€Ρ‹). БистСмы AOT-компиляции (Ahead Of Time compilation, компиляция ΠΏΠ΅Ρ€Π΅Π΄ исполнСниСм) спроСктированы Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ начнётся взаимодСйствиС этого ΠΊΠΎΠ΄Π° с систСмой. Π‘Π°ΠΌΠΎ ΠΏΠΎ сСбС использованиС JIT Π½Π΅ ускоряСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚, ΠΊΠ°ΠΊ ΠΈ Π² Python, Π½Π΅ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°. Однако JIT позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° Π² процСссС Π΅Π³ΠΎ выполнСния. Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ JIT-ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ способСн Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π½Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ части прилоТСния (Ρ‚Π°ΠΊΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ прилоТСния Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Β«hot spotΒ») ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π°, Π·Π°ΠΌΠ΅Π½ΠΈΠ² ΠΈΡ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ, Ρ‡Π΅ΠΌ Ρ‚Π΅, Ρ‡Ρ‚ΠΎ использовались Ρ€Π°Π½Π΅Π΅. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ снова ΠΈ снова выполняСт Π½Π΅ΠΊΠΈΠ΅ дСйствия, подобная оптимизация способна Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΡ… дСйствий. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Java ΠΈ C\# β€” это языки со строгой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, поэтому ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎ ΠΊΠΎΠ΄Π΅ большС ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. JIT-компилятор Π΅ΡΡ‚ΡŒ Π² PyPy, ΠΈ, ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано, эта рСализация ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python Π³ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС, Ρ‡Π΅ΠΌ CPython. БвСдСния, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ сравнСния Ρ€Π°Π·Π½Ρ‹Ρ… ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ² Python, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² [этом](https://hackernoon.com/which-is-the-fastest-version-of-python-2ae7c61a6b2b) ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅. ### β–ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π² CPython Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ JIT-компилятор? Π£ JIT-компиляторов Π΅ΡΡ‚ΡŒ ΠΈ нСдостатки. Один ΠΈΠ· Π½ΠΈΡ… β€” врСмя запуска. CPython ΠΈ Ρ‚Π°ΠΊ запускаСтся ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π° PyPy Π² 2-3 Ρ€Π°Π·Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ CPython. Π”Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя запуска JVM β€” это Ρ‚ΠΎΠΆΠ΅ извСстный Ρ„Π°ΠΊΡ‚. CLR .NET ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π·Π°ΠΏΡƒΡΠΊΠ°ΡΡΡŒ Π² Ρ…ΠΎΠ΄Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ систСмы, Π½ΠΎ Ρ‚ΡƒΡ‚ Π½Π°Π΄ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈ CLR, ΠΈ Ρ‚Π° опСрационная систСма, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ запускаСтся CLR, Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ. Если Ρƒ вас имССтся ΠΎΠ΄ΠΈΠ½ процСсс Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя, ΠΏΡ€ΠΈ этом Π² Ρ‚Π°ΠΊΠΎΠΌ процСссС имССтся ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ содСрТит интСнсивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ участки, Ρ‚ΠΎΠ³Π΄Π° Π²Π°ΠΌ стоит ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ JIT-компилятор. Однако, CPython β€” это рСализация ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅, с использованиСм Python, прилоТСния ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ оТидания запуска JIT-компилятора ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ запускС этого прилоТСния сильно Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ. CPython пытаСтся ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большСго количСства Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² использования Python. НапримСр, сущСствуСт возмоТности ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ JIT-компилятора ΠΊ Python, ΠΏΡ€Π°Π²Π΄Π°, [ΠΏΡ€ΠΎΠ΅ΠΊΡ‚](https://www.slideshare.net/AnthonyShaw5/pyjion-a-jit-extension-system-for-cpython), Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ рСализуСтся эта идСя, развиваСтся Π½Π΅ особСнно Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python, ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ использовании JIT-компилятора β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ PyPy. ## Python β€” динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык Π’ статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках, ΠΏΡ€ΠΈ объявлСнии ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Ρ‚ΠΈΠΏΡ‹. Π‘Ρ€Π΅Π΄ΠΈ Ρ‚Π°ΠΊΠΈΡ… языков ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ C, C++, Java, C\#, Go. Π’ динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках понятиС Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ смысл, Π½ΠΎ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ являСтся динамичСским. ``` ``` Π’ этом ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Python сначала создаёт ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ `a`, ΠΏΠΎΡ‚ΠΎΠΌ β€” Π²Ρ‚ΠΎΡ€ΡƒΡŽ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΈΠΌΠ΅ΡŽΡ‰ΡƒΡŽ Ρ‚ΠΈΠΏ `str`, ΠΈ освобоТдаСт ΠΏΠ°ΠΌΡΡ‚ΡŒ, которая Π±Ρ‹Π»Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ `a`. ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° языках с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ Π½Π° языках со статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ, Ρ‚Π°ΠΊΠΈΠ΅ языки созданы Π½Π΅ ΠΏΠΎ Ρ‡ΡŒΠ΅ΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΡ‚ΠΈ. ΠŸΡ€ΠΈ ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΡƒΡ‡Ρ‚Π΅Π½Ρ‹ особСнности Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… систСм. Всё, Ρ‡Ρ‚ΠΎ написано Π² тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² ΠΈΡ‚ΠΎΠ³Π΅, сводится ΠΊ инструкциям процСссора. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎΠΆΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ ΠΊ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌ структурам. Python выполняСт ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ прСобразования автоматичСски, программист этих процСссов Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚, ΠΈ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… прСобразованиях Π΅ΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ нСобходимости ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΈ Π΅Ρ‘ объявлСнии β€” это Π½Π΅ Ρ‚Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ языка, которая Π΄Π΅Π»Π°Π΅Ρ‚ Python ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ. АрхитСктура языка позволяСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ динамичСским практичСски всё, Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. НапримСр, Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ Β«ΠΎΠ±Π΅Π·ΡŒΡΠ½ΡŒΠΈΡ… ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉΒ» Π² ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌ систСмным Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ. Π’ Python Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ практичСски всё. ИмСнно Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Python Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ услоТняСт ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эту идСю, я ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ инструмСнтом для трассировки систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π² MacOS, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся DTrace. Π’ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΌ дистрибутивС CPython Π½Π΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ DTrace, поэтому CPython Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ настройками. Π’ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вСрсия 3.6.6. Π˜Ρ‚Π°ΠΊ, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ дСйствий: ``` ``` Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ `python.exe`, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ DTRace для трассировки ΠΊΠΎΠ΄Π°. Об использовании DTrace с Python ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ [здСсь](https://github.com/paulross/dtrace-py#the-lightning-talk). А Π²ΠΎΡ‚ [Ρ‚ΡƒΡ‚](https://github.com/paulross/dtrace-py/tree/master/toolkit) ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ скрипты для измСрСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ DTrace Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Python-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π‘Ρ€Π΅Π΄ΠΈ Π½ΠΈΡ… β€” ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, врСмя использования процСссора, свСдСния ΠΎ систСмных Π²Ρ‹Π·ΠΎΠ²Π°Ρ… ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ `dtrace`: ``` sudo dtrace -s toolkit/<tracer>.d -c β€˜../cpython/python.exe script.py’ ``` А Π²ΠΎΡ‚ ΠΊΠ°ΠΊ срСдство трассировки `py_callflow` ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. ![](https://habrastorage.org/getpro/habr/post_images/13e/bd4/926/13ebd492636a94b23400305293aec346.gif) *Врассировка с использованиСм DTrace* Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠΌ Π½Π° вопрос ΠΎ Ρ‚ΠΎΠΌ, влияСт Π»ΠΈ динамичСская типизация Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Python. Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сообраТСния ΠΏΠΎ этому ΠΏΠΎΠ²ΠΎΠ΄Ρƒ: - ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈ конвСрсия Ρ‚ΠΈΠΏΠΎΠ² β€” ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ тяТёлыС. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° выполняСтся ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π΅Ρ‘ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ запись, производится ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠ°. - Π―Π·Ρ‹ΠΊ, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒΡŽ, слоТно ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ языки Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ быстрСС Python, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΈΠ΄ΡƒΡ‚ Π½Π° Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Π΅ компромиссы, выбирая ΠΌΠ΅ΠΆΠ΄Ρƒ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒΡŽ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. - ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ [Cython](http://cython.org/) ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Python ΠΈ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² [этом ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅](http://notes-on-cython.readthedocs.io/en/latest/std_dev.html), ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ 84-ΠΊΡ€Π°Ρ‚Π½ΠΎΠΌΡƒ росту ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² сравнСнии с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Python. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° этот ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ. ## Π˜Ρ‚ΠΎΠ³ΠΈ ΠŸΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ нСвысокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Python являСтся Π΅Π³ΠΎ динамичСская ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π° ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ инструмСнт для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Π΅ΠΉΡˆΠΈΡ… Π·Π°Π΄Π°Ρ‡. Для достиТСния Ρ‚Π΅Ρ… ΠΆΠ΅ Ρ†Π΅Π»Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠΈΡΠΊΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ инструмСнты. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΉΡ‚ΠΈ ΠΈΡ… удастся, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ β€” Π½Π΅Ρ‚. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, написанныС Π½Π° Python, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ возмоТности ΠΏΠΎ асинхронному Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΊΠΎΠ΄Π°, инструмСнты профилирования, ΠΈ β€” ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ подбирая ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€. Π’Π°ΠΊ, для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, врСмя запуска ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Π²Π°ΠΆΠ½ΠΎ, Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΈΠ³Ρ€Π°Ρ‚ΡŒ ΠΎΡ‚ использования JIT-компилятора, рассмотритС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования PyPy. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° максимальная ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ ограничСниям статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ β€” взглянитС Π½Π° Cython. **Π£Π²Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ\!** Как Π²Ρ‹ Ρ€Π΅ΡˆΠ°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ нСвысокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Python? [![](https://habrastorage.org/r/w1560/files/1ba/550/d25/1ba550d25e8846ce8805de564da6aa63.png)](https://ruvds.com/ru-rub/#order) Π’Π΅Π³ΠΈ: - [Python](https://habr.com/ru/search/?target_type=posts&order=relevance&q=[Python]) - [Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°](https://habr.com/ru/search/?target_type=posts&order=relevance&q=[%D1%80%D0%B0%D0%B7%D1%80%D0%B0%D0%B1%D0%BE%D1%82%D0%BA%D0%B0]) Π₯Π°Π±Ρ‹: - [Π‘Π»ΠΎΠ³ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΈ RUVDS.com](https://habr.com/ru/companies/ruvds/articles/) - [Python](https://habr.com/ru/hubs/python/) - [Π’Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ°](https://habr.com/ru/hubs/webdev/) \+48 253 [56](https://habr.com/ru/companies/ruvds/articles/418823/comments/) [![](https://habrastorage.org/getpro/habr/company/608/f02/206/608f0220675e20da793aa1974a1a0a2e.png)](https://habr.com/ru/companies/ruvds/profile/) [RUVDS.com](https://habr.com/ru/companies/ruvds/profile/) VDS/VPS-хостинг. Π‘ΠΊΠΈΠ΄ΠΊΠ° 15% ΠΏΠΎ ΠΊΠΎΠ΄Ρƒ **HABR15** [Telegram](https://telegram.me/ruvds_community)[Π’ΠšΠΎΠ½Ρ‚Π°ΠΊΡ‚Π΅](https://vk.com/ru_vds)[X](https://x.com/ru_vds) [![](https://habrastorage.org/getpro/habr/avatars/1b8/7ff/39c/1b87ff39ce6dfc7224cb45ab05384ecc.png)](https://habr.com/ru/users/ru_vds/) 610 ΠšΠ°Ρ€ΠΌΠ° 27\.2 ΠžΠ±Ρ‰ΠΈΠΉ Ρ€Π΅ΠΉΡ‚ΠΈΠ½Π³ [@ru\_vds](https://habr.com/ru/users/ru_vds/) ΠŸΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒ ΠŸΠΎΠ΄ΠΏΠΈΡΠ°Ρ‚ΡŒΡΡ [ΠšΠΎΠΌΠΌΠ΅Π½Ρ‚Π°Ρ€ΠΈΠΈ 56](https://habr.com/ru/companies/ruvds/articles/418823/comments/) ## ΠŸΡƒΠ±Π»ΠΈΠΊΠ°Ρ†ΠΈΠΈ Π›ΡƒΡ‡ΡˆΠΈΠ΅ Π·Π° сутки ΠŸΠΎΡ…ΠΎΠΆΠΈΠ΅ ## Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ Π‘Π°ΠΉΡ‚ [ruvds.com](https://ruvds.com/) Π”Π°Ρ‚Π° рСгистрации 18 ΠΌΠ°Ρ€Ρ‚Π° 2016 Π”Π°Ρ‚Π° основания 27 июля 2015 Π§ΠΈΡΠ»Π΅Π½Π½ΠΎΡΡ‚ΡŒ 11–30 Ρ‡Π΅Π»ΠΎΠ²Π΅ΠΊ ΠœΠ΅ΡΡ‚ΠΎΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ Россия ΠŸΡ€Π΅Π΄ΡΡ‚Π°Π²ΠΈΡ‚Π΅Π»ΡŒ [ruvds](https://habr.com/ru/users/ruvds/) Π’Π°Ρˆ Π°ΠΊΠΊΠ°ΡƒΠ½Ρ‚ - [Π’ΠΎΠΉΡ‚ΠΈ](https://habr.com/kek/v1/auth/habrahabr/?back=/ru/companies/ruvds/articles/418823/&hl=ru) - [РСгистрация](https://habr.com/kek/v1/auth/habrahabr-register/?back=/ru/companies/ruvds/articles/418823/&hl=ru) Π Π°Π·Π΄Π΅Π»Ρ‹ - [Π‘Ρ‚Π°Ρ‚ΡŒΠΈ](https://habr.com/ru/articles/) - [Новости](https://habr.com/ru/news/) - [Π₯Π°Π±Ρ‹](https://habr.com/ru/hubs/) - [Компании](https://habr.com/ru/companies/) - [Авторы](https://habr.com/ru/users/) - [ΠŸΠ΅ΡΠΎΡ‡Π½ΠΈΡ†Π°](https://habr.com/ru/sandbox/) Π˜Π½Ρ„ΠΎΡ€ΠΌΠ°Ρ†ΠΈΡ - [Устройство сайта](https://habr.com/ru/docs/help/) - [Для Π°Π²Ρ‚ΠΎΡ€ΠΎΠ²](https://habr.com/ru/docs/authors/codex/) - [Для ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠΉ](https://habr.com/ru/docs/companies/corpblogs/) - [Π”ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Ρ‹](https://habr.com/ru/docs/docs/transparency/) - [БоглашСниС](https://account.habr.com/info/agreement/?hl=ru_RU) - [ΠšΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ](https://account.habr.com/info/confidential/?hl=ru_RU) Услуги - [ΠšΠΎΡ€ΠΏΠΎΡ€Π°Ρ‚ΠΈΠ²Π½Ρ‹ΠΉ Π±Π»ΠΎΠ³](https://company.habr.com/ru/corporate-blogs/) - [МСдийная Ρ€Π΅ΠΊΠ»Π°ΠΌΠ°](https://company.habr.com/ru/advertising/) - [НативныС ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Ρ‹](https://company.habr.com/ru/native-special/) - [ΠžΠ±Ρ€Π°Π·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½Ρ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹](https://company.habr.com/ru/education-programs/) - [Π‘Ρ‚Π°Ρ€Ρ‚Π°ΠΏΠ°ΠΌ](https://company.habr.com/ru/hello-startup/) Настройка языка [ВСхничСская ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠ°](https://habr.com/ru/feedback/) Β© 2006–2026, [Habr](https://company.habr.com/)
Readable Markdown
9 ΠΌΠΈΠ½ 92K ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ Π’ послСднСС врСмя ΠΌΠΎΠΆΠ½ΠΎ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ рост популярности языка программирования Python. Он ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π² DevOps, Π² Π°Π½Π°Π»ΠΈΠ·Π΅ Π΄Π°Π½Π½Ρ‹Ρ…, Π² Π²Π΅Π±-Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅, Π² сфСрС бСзопасности ΠΈ Π² Π΄Ρ€ΡƒΠ³ΠΈΡ… областях. Но Π²ΠΎΡ‚ ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒβ€¦ Π—Π΄Π΅ΡΡŒ этому языку ΠΏΠΎΡ…Π²Π°ΡΡ‚Π°Ρ‚ΡŒΡΡ Π½Π΅Ρ‡Π΅ΠΌ. Автор ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π°, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ ΠΌΡ‹ сСгодня ΠΏΡƒΠ±Π»ΠΈΠΊΡƒΠ΅ΠΌ, Ρ€Π΅ΡˆΠΈΠ» Π²Ρ‹ΡΡΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΌΠ΅Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Python ΠΈ Π½Π°ΠΉΡ‚ΠΈ срСдства Π΅Π³ΠΎ ускорСния. [![](https://habrastorage.org/r/w1560/webt/tv/zp/uz/tvzpuzzfhsgdyegpe8ri3pbl3mw.jpeg)](https://habr.com/company/ruvds/blog/418823/) ## ΠžΠ±Ρ‰ΠΈΠ΅ полоТСния Как Java, Π² ΠΏΠ»Π°Π½Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ, соотносится с C ΠΈΠ»ΠΈ C++? Как ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ C\# ΠΈ Python? ΠžΡ‚Π²Π΅Ρ‚Ρ‹ Π½Π° эти вопросы ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎ зависят ΠΎΡ‚ Ρ‚ΠΈΠΏΠ° Π°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Ρ… исслСдоватСлСм ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. НС сущСствуСт идСального Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ°, Π½ΠΎ, изучая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, написанных Π½Π° Ρ€Π°Π·Π½Ρ‹Ρ… языках, Π½Π΅ΠΏΠ»ΠΎΡ…ΠΎΠΉ [ΠΎΡ‚ΠΏΡ€Π°Π²Π½ΠΎΠΉ Ρ‚ΠΎΡ‡ΠΊΠΎΠΉ](http://algs4.cs.princeton.edu/faq/) ΠΌΠΎΠΆΠ΅Ρ‚ ΡΡ‚Π°Ρ‚ΡŒ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚ The Computer Language Benchmarks Game. Π― ΡΡΡ‹Π»Π°ΡŽΡΡŒ Π½Π° The Computer Language Benchmarks Game ΡƒΠΆΠ΅ большС дСсяти Π»Π΅Ρ‚. Python, Π² сравнСнии с Π΄Ρ€ΡƒΠ³ΠΈΠΌΠΈ языками, Ρ‚Π°ΠΊΠΈΠΌΠΈ, ΠΊΠ°ΠΊ Java, C\#, Go, JavaScript, C++, являСтся ΠΎΠ΄Π½ΠΈΠΌ ΠΈΠ· [самых ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹Ρ…](https://benchmarksgame-team.pages.debian.net/benchmarksgame/faster/python.html). Бюда входят языки, Π² ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ [JIT](https://en.wikipedia.org/wiki/Just-in-time_compilation)\-компиляция (C\#, Java), ΠΈ [AOT](https://en.wikipedia.org/wiki/Ahead-of-time_compilation)\-компиляция (C, C++), Π° Ρ‚Π°ΠΊΠΆΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹Π΅ языки, Ρ‚Π°ΠΊΠΈΠ΅, ΠΊΠ°ΠΊ JavaScript. Π’ΡƒΡ‚ ΠΌΠ½Π΅ Ρ…ΠΎΡ‚Π΅Π»ΠΎΡΡŒ Π±Ρ‹ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ говоря Β«PythonΒ», я имСю Π² Π²ΠΈΠ΄Ρƒ ΡΡ‚Π°Π»ΠΎΠ½Π½ΡƒΡŽ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΡŽ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python β€” CPython. Π’ этом ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅ ΠΌΡ‹ коснёмся ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Π΅Π³ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·Π°Ρ†ΠΈΠΉ. БобствСнно говоря, здСсь ΠΌΠ½Π΅ хочСтся Π½Π°ΠΉΡ‚ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° вопрос ΠΎ Ρ‚ΠΎΠΌ, ΠΏΠΎΡ‡Π΅ΠΌΡƒ Python трСбуСтся Π² 2-10 Ρ€Π°Π· большС Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ, Ρ‡Π΅ΠΌ Π΄Ρ€ΡƒΠ³ΠΈΠΌ языкам, Π½Π° Ρ€Π΅ΡˆΠ΅Π½ΠΈΠ΅ сопоставимых Π·Π°Π΄Π°Ρ‡, ΠΈ ΠΎ Ρ‚ΠΎΠΌ, ΠΌΠΎΠΆΠ½ΠΎ Π»ΠΈ ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ Π΅Π³ΠΎ быстрСС. Π’ΠΎΡ‚ основныС Ρ‚Π΅ΠΎΡ€ΠΈΠΈ, ΠΏΡ‹Ρ‚Π°ΡŽΡ‰ΠΈΠ΅ΡΡ ΠΎΠ±ΡŠΡΡΠ½ΠΈΡ‚ΡŒ ΠΏΡ€ΠΈΡ‡ΠΈΠ½Ρ‹ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Python: - ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° этого β€” Π² GIL (Global Interpreter Lock, глобальная Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°). - ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Python β€” это ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ, Π° Π½Π΅ ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ язык. - ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π° β€” Π² динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ. ΠŸΡ€ΠΎΠ°Π½Π°Π»ΠΈΠ·ΠΈΡ€ΡƒΠ΅ΠΌ эти ΠΈΠ΄Π΅ΠΈ ΠΈ попытаСмся Π½Π°ΠΉΡ‚ΠΈ ΠΎΡ‚Π²Π΅Ρ‚ Π½Π° вопрос ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ сильнСС всСго ΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ влияниС Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ. ## GIL Π‘ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Ρ‹ ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‚ многоядСрными процСссорами, ΠΈΠ½ΠΎΠ³Π΄Π° Π²ΡΡ‚Ρ€Π΅Ρ‡Π°ΡŽΡ‚ΡΡ ΠΈ многопроцСссорныС систСмы. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ всю эту Π²Ρ‹Ρ‡ΠΈΡΠ»ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΌΠΎΡ‰ΡŒ, опСрационная систСма примСняСт Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹Π΅ структуры, Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ, Π² Ρ‚ΠΎ врСмя ΠΊΠ°ΠΊ процСссы (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€ β€” процСсс Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Chrome) ΠΌΠΎΠ³ΡƒΡ‚ Π·Π°ΠΏΡƒΡΠΊΠ°Ρ‚ΡŒ мноТСство ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² ΠΈ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌ ΠΎΠ±Ρ€Π°Π·ΠΎΠΌ ΠΈΡ… ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΠΊΠ°ΠΊΠΎΠΉ-Ρ‚ΠΎ процСсс особСнно сильно нуТдаСтся Π² рСсурсах процСссора, Π΅Π³ΠΎ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ Ρ€Π°Π·Π΄Π΅Π»Π΅Π½ΠΎ ΠΌΠ΅ΠΆΠ΄Ρƒ нСсколькими ядрами, Ρ‡Ρ‚ΠΎ позволяСт Π±ΠΎΠ»ΡŒΡˆΠΈΠ½ΡΡ‚Π²Ρƒ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ быстрСС Ρ€Π΅ΡˆΠ°Ρ‚ΡŒ Π²ΡΡ‚Π°ΡŽΡ‰ΠΈΠ΅ ΠΏΠ΅Ρ€Π΅Π΄ Π½ΠΈΠΌΠΈ Π·Π°Π΄Π°Ρ‡ΠΈ. НапримСр, Ρƒ ΠΌΠΎΠ΅Π³ΠΎ Π±Ρ€Π°ΡƒΠ·Π΅Ρ€Π° Chrome, Π² Ρ‚ΠΎΡ‚ ΠΌΠΎΠΌΠ΅Π½Ρ‚, ΠΊΠΎΠ³Π΄Π° я это ΠΏΠΈΡˆΡƒ, имССтся 44 ΠΎΡ‚ΠΊΡ€Ρ‹Ρ‚Ρ‹Ρ… ΠΏΠΎΡ‚ΠΎΠΊΠ°. Π’ΡƒΡ‚ стоит ΡƒΡ‡ΠΈΡ‚Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΎ, Ρ‡Ρ‚ΠΎ структура ΠΈ API систСмы Ρ€Π°Π±ΠΎΡ‚Ρ‹ с ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ различаСтся Π² ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Ρ‹Ρ… систСмах, основанных Π½Π° Posix (Mac OS, Linux), ΠΈ Π² ОБ сСмСйства Windows. ΠžΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΎΠ½Π½Π°Ρ систСма, ΠΊΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, занимаСтся ΠΏΠ»Π°Π½ΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Если Ρ€Π°Π½ΡŒΡˆΠ΅ Π²Ρ‹ Π½Π΅ Π²ΡΡ‚Ρ€Π΅Ρ‡Π°Π»ΠΈΡΡŒ с ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΌ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΈΡ€ΠΎΠ²Π°Π½ΠΈΠ΅ΠΌ, Ρ‚ΠΎ сСйчас Π²Π°ΠΌ Π½ΡƒΠΆΠ½ΠΎ ΠΏΠΎΠ·Π½Π°ΠΊΠΎΠΌΠΈΡ‚ΡŒΡΡ с Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΌΠΈ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°ΠΌΠΈ (locks). Бмысл Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΎΠΊ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΏΠΎΠ·Π²ΠΎΠ»ΡΡŽΡ‚ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ Ρ‚Π°ΠΊΠΎΠ΅ ΠΏΠΎΠ²Π΅Π΄Π΅Π½ΠΈΠ΅ систСмы, ΠΊΠΎΠ³Π΄Π°, Π² ΠΌΠ½ΠΎΠ³ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠΉ срСдС, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΏΡ€ΠΈ ΠΈΠ·ΠΌΠ΅Π½Π΅Π½ΠΈΠΈ Π½Π΅ΠΊΠΎΠ΅ΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ Π² памяти, доступ ΠΊ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ области памяти (для чтСния ΠΈΠ»ΠΈ измСнСния) Π½Π΅ ΠΌΠΎΠ³ΡƒΡ‚ ΠΎΠ΄Π½ΠΎΠ²Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Когда ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ CPython создаёт ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅, ΠΎΠ½ выдСляСт ΠΏΠ°ΠΌΡΡ‚ΡŒ, Π° Π·Π°Ρ‚Π΅ΠΌ подсчитываСт количСство ΡΡƒΡ‰Π΅ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ссылок Π½Π° эти ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅. Π­Ρ‚Π° концСпция извСстна ΠΊΠ°ΠΊ подсчёт ссылок (reference counting). Если число ссылок равняСтся Π½ΡƒΠ»ΡŽ, Ρ‚ΠΎΠ³Π΄Π° ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΉ участок памяти освобоТдаСтся. ИмСнно поэтому, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, созданиС Β«Π²Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…Β» ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, скаТСм, Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… областСй видимости Ρ†ΠΈΠΊΠ»ΠΎΠ², Π½Π΅ ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ Ρ‡Ρ€Π΅Π·ΠΌΠ΅Ρ€Π½ΠΎΠΌΡƒ ΡƒΠ²Π΅Π»ΠΈΡ‡Π΅Π½ΠΈΡŽ ΠΎΠ±ΡŠΡ‘ΠΌΠ° памяти, потрСбляСмого ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ΠΌ. Π‘Π°ΠΌΠΎΠ΅ интСрСсноС начинаСтся Ρ‚ΠΎΠ³Π΄Π°, ΠΊΠΎΠ³Π΄Π° ΠΎΠ΄Π½ΠΈΠΌΠΈ ΠΈ Ρ‚Π΅ΠΌΠΈ ΠΆΠ΅ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹ΠΌΠΈ совмСстно ΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ нСсколько ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², Π° главная ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΠ° Ρ‚ΡƒΡ‚ Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, ΠΊΠ°ΠΊ ΠΈΠΌΠ΅Π½Π½ΠΎ CPython выполняСт подсчёт ссылок. Π’ΡƒΡ‚ ΠΈ проявляСтся дСйствиС «глобальной Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°Β», которая Ρ‚Ρ‰Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ ΠΊΠΎΠ½Ρ‚Ρ€ΠΎΠ»ΠΈΡ€ΡƒΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ². Π˜Π½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ лишь ΠΎΠ΄Π½Ρƒ ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΡŽ Π·Π° Ρ€Π°Π·, нСзависимо ΠΎΡ‚ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ ΠΌΠ½ΠΎΠ³ΠΎ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² имССтся Π² ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠ΅. ### β–ΠšΠ°ΠΊ GIL влияСт Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Python-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ? Если Ρƒ нас имССтся ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½ΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅, Ρ€Π°Π±ΠΎΡ‚Π°ΡŽΡ‰Π΅Π΅ Π² ΠΎΠ΄Π½ΠΎΠΌ процСссС ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python, Ρ‚ΠΎ GIL Π½ΠΈΠΊΠ°ΠΊ Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π½Π΅ влияСт. Если, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΈΠ·Π±Π°Π²ΠΈΡ‚ΡŒΡΡ ΠΎΡ‚ GIL, Π½ΠΈΠΊΠ°ΠΊΠΎΠΉ Ρ€Π°Π·Π½ΠΈΡ†Ρ‹ Π² ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΌΡ‹ Π½Π΅ Π·Π°ΠΌΠ΅Ρ‚ΠΈΠΌ. Если ΠΆΠ΅, Π² ΠΏΡ€Π΅Π΄Π΅Π»Π°Ρ… ΠΎΠ΄Π½ΠΎΠ³ΠΎ процСсса ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python, Π½Π°Π΄ΠΎ Ρ€Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΎΠ±Ρ€Π°Π±ΠΎΡ‚ΠΊΡƒ Π΄Π°Π½Π½Ρ‹Ρ… с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² многопоточности, ΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Π±ΡƒΠ΄ΡƒΡ‚ интСнсивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ подсистСму Π²Π²ΠΎΠ΄Π°-Π²Ρ‹Π²ΠΎΠ΄Π° (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Ссли ΠΎΠ½ΠΈ Π±ΡƒΠ΄ΡƒΡ‚ Ρ€Π°Π±ΠΎΡ‚Π°Ρ‚ΡŒ с ΡΠ΅Ρ‚ΡŒΡŽ ΠΈΠ»ΠΈ с диском), Ρ‚ΠΎΠ³Π΄Π° ΠΌΠΎΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ Π½Π°Π±Π»ΡŽΠ΄Π°Ρ‚ΡŒ послСдствия Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ GIL управляСт ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ это выглядит Π² случаС использования Π΄Π²ΡƒΡ… ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ², интСнсивно Π½Π°Π³Ρ€ΡƒΠΆΠ°ΡŽΡ‰ΠΈΡ… процСссов. ![](https://habrastorage.org/r/w1560/getpro/habr/post_images/f9e/379/f47/f9e379f4724ba48881f53b489ca5ed1d.png) *Визуализация Ρ€Π°Π±ΠΎΡ‚Ρ‹ GIL (взято [ΠΎΡ‚ΡΡŽΠ΄Π°](http://dabeaz.blogspot.com/2010/01/python-gil-visualized.html))* Если Ρƒ вас имССтся Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ (Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, основанноС Π½Π° Ρ„Ρ€Π΅ΠΉΠΌΠ²ΠΎΡ€ΠΊΠ΅ Django), ΠΈ Π²Ρ‹ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚Π΅ WSGI, Ρ‚ΠΎ ΠΊΠ°ΠΆΠ΄Ρ‹ΠΉ запрос ΠΊ Π²Π΅Π±-ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡŽ Π±ΡƒΠ΄Π΅Ρ‚ ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒΡΡ ΠΎΡ‚Π΄Π΅Π»ΡŒΠ½Ρ‹ΠΌ процСссом ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python, Ρ‚ΠΎ Π΅ΡΡ‚ΡŒ, Ρƒ нас имССтся лишь 1 Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ° Π½Π° запрос. Π’Π°ΠΊ ΠΊΠ°ΠΊ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ Python запускаСтся ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π² Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… рСализациях WSGI имССтся Ρ‚Π°ΠΊ Π½Π°Π·Ρ‹Π²Π°Π΅ΠΌΡ‹ΠΉ Β«Ρ€Π΅ΠΆΠΈΠΌ Π΄Π΅ΠΌΠΎΠ½Π°Β», ΠΏΡ€ΠΈ использовании ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ [процСссы ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π°](https://www.slideshare.net/GrahamDumpleton/secrets-of-a-wsgi-master) ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΈΠ²Π°ΡŽΡ‚ΡΡ Π² Ρ€Π°Π±ΠΎΡ‡Π΅ΠΌ состоянии, Ρ‡Ρ‚ΠΎ позволяСт систСмС быстрСС ΠΎΠ±ΡΠ»ΡƒΠΆΠΈΠ²Π°Ρ‚ΡŒ запросы. ### β–ΠšΠ°ΠΊ Π²Π΅Π΄ΡƒΡ‚ сСбя Π΄Ρ€ΡƒΠ³ΠΈΠ΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Ρ‹ Python? Π’ [PyPy](http://doc.pypy.org/en/latest/faq.html#does-pypy-have-a-gil-why) Π΅ΡΡ‚ΡŒ GIL, ΠΎΠ½ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎ Π±ΠΎΠ»Π΅Π΅ Ρ‡Π΅ΠΌ Π² 3 Ρ€Π°Π·Π° быстрСС, Ρ‡Π΅ΠΌ CPython. Π’ [Jython](http://www.jython.org/jythonbook/en/1.0/Concurrency.html#no-global-interpreter-lock) Π½Π΅Ρ‚ GIL, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΏΠΎΡ‚ΠΎΠΊΠΈ Python Π² Jython прСдставлСны Π² Π²ΠΈΠ΄Π΅ ΠΏΠΎΡ‚ΠΎΠΊΠΎΠ² Java. Π’Π°ΠΊΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ возмоТности ΠΏΠΎ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΡŽ ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ JVM. ### β–ΠšΠ°ΠΊ ΡƒΠΏΡ€Π°Π²Π»Π΅Π½ΠΈΠ΅ ΠΏΠΎΡ‚ΠΎΠΊΠ°ΠΌΠΈ ΠΎΡ€Π³Π°Π½ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ Π² JavaScript? Если Π³ΠΎΠ²ΠΎΡ€ΠΈΡ‚ΡŒ ΠΎ JavaScript, Ρ‚ΠΎ, Π² ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ, Π½Π°Π΄ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ всС JS-Π΄Π²ΠΈΠΆΠΊΠΈ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ сборки мусора [mark-and-sweep](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Memory_Management). Как ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано, основная ΠΏΡ€ΠΈΡ‡ΠΈΠ½Π° нСобходимости использования GIL β€” это Π°Π»Π³ΠΎΡ€ΠΈΡ‚ΠΌ управлСния ΠΏΠ°ΠΌΡΡ‚ΡŒΡŽ, примСняСмый Π² CPython. Π’ JavaScript Π½Π΅Ρ‚ GIL, ΠΎΠ΄Π½Π°ΠΊΠΎ, JS β€” это ΠΎΠ΄Π½ΠΎΠΏΠΎΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ язык, поэтому Π² Π½Ρ‘ΠΌ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹ΠΉ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌ ΠΈ Π½Π΅ Π½ΡƒΠΆΠ΅Π½. ВмСсто ΠΏΠ°Ρ€Π°Π»Π»Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ выполнСния ΠΊΠΎΠ΄Π° Π² JavaScript ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡŽΡ‚ΡΡ ΠΌΠ΅Ρ‚ΠΎΠ΄ΠΈΠΊΠΈ асинхронного программирования, основанныС Π½Π° Ρ†ΠΈΠΊΠ»Π΅ событий, промисах ΠΈ коллбэках. Π’ Python Π΅ΡΡ‚ΡŒ Π½Π΅Ρ‡Ρ‚ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠ΅, прСдставлСнноС ΠΌΠΎΠ΄ΡƒΠ»Π΅ΠΌ `asyncio`. ## Python β€” ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ язык МнС часто ΠΏΡ€ΠΈΡ…ΠΎΠ΄ΠΈΠ»ΠΎΡΡŒ ΡΠ»Ρ‹ΡˆΠ°Ρ‚ΡŒ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ низкая ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Python являСтся слСдствиСм Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ это β€” ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚ΠΈΡ€ΡƒΠ΅ΠΌΡ‹ΠΉ язык. ΠŸΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ утвСрТдСния основаны Π½Π° Π³Ρ€ΡƒΠ±ΠΎΠΌ ΡƒΠΏΡ€ΠΎΡ‰Π΅Π½ΠΈΠΈ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ, Π½Π° самом Π΄Π΅Π»Π΅, Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ CPython. Если, Π² Ρ‚Π΅Ρ€ΠΌΠΈΠ½Π°Π»Π΅, ввСсти ΠΊΠΎΠΌΠ°Π½Π΄Ρƒ Π²Ρ€ΠΎΠ΄Π΅ `python myscript.py`, Ρ‚ΠΎΠ³Π΄Π° CPython Π½Π°Ρ‡Π½Ρ‘Ρ‚ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΡƒΡŽ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ дСйствий, которая Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‡Ρ‚Π΅Π½ΠΈΠΈ, лСксичСском Π°Π½Π°Π»ΠΈΠ·Π΅, парсингС, компиляции, ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ†ΠΈΠΈ ΠΈ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠΈ ΠΊΠΎΠ΄Π° скрипта. Если вас ΠΈΠ½Ρ‚Π΅Ρ€Π΅ΡΡƒΡŽΡ‚ подробности β€” взглянитС Π½Π° [этот](https://hackernoon.com/modifying-the-python-language-in-7-minutes-b94b0a99ce14) ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π». Для нас, ΠΏΡ€ΠΈ рассмотрСнии этого процСсса, особСнно Π²Π°ΠΆΠ½Ρ‹ΠΌ являСтся Ρ‚ΠΎΡ‚ Ρ„Π°ΠΊΡ‚, Ρ‡Ρ‚ΠΎ здСсь, Π½Π° стадии компиляции, создаётся `.pyc`\-Ρ„Π°ΠΉΠ», ΠΈ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ΠΎΠ² ΠΏΠΈΡˆΠ΅Ρ‚ΡΡ Π² Ρ„Π°ΠΉΠ» Π² Π΄ΠΈΡ€Π΅ΠΊΡ‚ΠΎΡ€ΠΈΠΈ `__pycache__/`, которая ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ ΠΈ Π² Python 3, ΠΈ Π² Python 2. ПодобноС примСняСтся Π½Π΅ Ρ‚ΠΎΠ»ΡŒΠΊΠΎ ΠΊ написанным Π½Π°ΠΌΠΈ скриптам, Π½ΠΎ ΠΈ ΠΊ ΠΈΠΌΠΏΠΎΡ€Ρ‚ΠΈΡ€ΠΎΠ²Π°Π½Π½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ, Π²ΠΊΠ»ΡŽΡ‡Π°Ρ сторонниС ΠΌΠΎΠ΄ΡƒΠ»ΠΈ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, Π±ΠΎΠ»ΡŒΡˆΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ Π²Ρ€Π΅ΠΌΠ΅Π½ΠΈ (Ссли Ρ‚ΠΎΠ»ΡŒΠΊΠΎ Π²Ρ‹ Π½Π΅ ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ запускаСтся лишь ΠΎΠ΄ΠΈΠ½ Ρ€Π°Π·) Python занимаСтся Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ΠΌ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠ³ΠΎ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°. Если ΡΡ€Π°Π²Π½ΠΈΡ‚ΡŒ это с Ρ‚Π΅ΠΌ, Ρ‡Ρ‚ΠΎ происходит Π² Java ΠΈ Π² C\#, окаТСтся, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ΄ Π½Π° Java компилируСтся Π² Β«Intermediate LanguageΒ», ΠΈ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Π°Ρ машина Java Ρ‡ΠΈΡ‚Π°Π΅Ρ‚ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄ ΠΈ выполняСт Π΅Π³ΠΎ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ Π² ΠΌΠ°ΡˆΠΈΠ½Π½Ρ‹ΠΉ ΠΊΠΎΠ΄. Β«ΠŸΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ язык» .NET CIL (это Ρ‚ΠΎ ΠΆΠ΅ самоС, Ρ‡Ρ‚ΠΎ .NET Common-Language-Runtime, CLR), ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ JIT-ΠΊΠΎΠΌΠΏΠΈΠ»ΡΡ†ΠΈΡŽ для ΠΏΠ΅Ρ€Π΅Ρ…ΠΎΠ΄Π° ΠΊ ΠΌΠ°ΡˆΠΈΠ½Π½ΠΎΠΌΡƒ ΠΊΠΎΠ΄Ρƒ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅, ΠΈ Π² Java ΠΈ Π² C\# ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ Π½Π΅ΠΊΠΈΠΉ Β«ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½Ρ‹ΠΉ язык» ΠΈ ΠΏΡ€ΠΈΡΡƒΡ‚ΡΡ‚Π²ΡƒΡŽΡ‚ ΠΏΠΎΡ…ΠΎΠΆΠΈΠ΅ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΡ‹. ΠŸΠΎΡ‡Π΅ΠΌΡƒ ΠΆΠ΅ Ρ‚ΠΎΠ³Π΄Π° Python ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π² Π±Π΅Π½Ρ‡ΠΌΠ°Ρ€ΠΊΠ°Ρ… Π³ΠΎΡ€Π°Π·Π΄ΠΎ Ρ…ΡƒΠ΄ΡˆΠΈΠ΅ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Ρ‹, Ρ‡Π΅ΠΌ Java ΠΈ C\#, Ссли всС эти языки ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ Π²ΠΈΡ€Ρ‚ΡƒΠ°Π»ΡŒΠ½Ρ‹Π΅ ΠΌΠ°ΡˆΠΈΠ½Ρ‹ ΠΈ ΠΊΠ°ΠΊΠΈΠ΅-Ρ‚ΠΎ разновидности Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°? Π’ ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΎΡ‡Π΅Ρ€Π΅Π΄ΡŒ β€” ΠΈΠ·-Π·Π° Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎ Π² .NET ΠΈ Π² Java ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ JIT-компиляция. JIT-компиляция (Just In Time compilation, компиляция Β«Π½Π° Π»Π΅Ρ‚ΡƒΒ» ΠΈΠ»ΠΈ Β«Ρ‚ΠΎΡ‡Π½ΠΎ Π² срок») Ρ‚Ρ€Π΅Π±ΡƒΠ΅Ρ‚ наличия ΠΏΡ€ΠΎΠΌΠ΅ΠΆΡƒΡ‚ΠΎΡ‡Π½ΠΎΠ³ΠΎ языка для Ρ‚ΠΎΠ³ΠΎ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΠΎΠ·Π²ΠΎΠ»ΠΈΡ‚ΡŒ ΠΎΡΡƒΡ‰Π΅ΡΡ‚Π²Π»ΡΡ‚ΡŒ Ρ€Π°Π·Π±ΠΈΠ΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π° Π½Π° Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ (ΠΊΠ°Π΄Ρ€Ρ‹). БистСмы AOT-компиляции (Ahead Of Time compilation, компиляция ΠΏΠ΅Ρ€Π΅Π΄ исполнСниСм) спроСктированы Ρ‚Π°ΠΊ, Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ»Π½ΡƒΡŽ Ρ€Π°Π±ΠΎΡ‚ΠΎΡΠΏΠΎΡΠΎΠ±Π½ΠΎΡΡ‚ΡŒ ΠΊΠΎΠ΄Π° Π΄ΠΎ Ρ‚ΠΎΠ³ΠΎ, ΠΊΠ°ΠΊ начнётся взаимодСйствиС этого ΠΊΠΎΠ΄Π° с систСмой. Π‘Π°ΠΌΠΎ ΠΏΠΎ сСбС использованиС JIT Π½Π΅ ускоряСт Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΊΠΎΠ΄Π°, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ Π½Π° Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ ΠΏΠΎΡΡ‚ΡƒΠΏΠ°ΡŽΡ‚, ΠΊΠ°ΠΊ ΠΈ Π² Python, Π½Π΅ΠΊΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ Π±Π°ΠΉΡ‚-ΠΊΠΎΠ΄Π°. Однако JIT позволяСт Π²Ρ‹ΠΏΠΎΠ»Π½ΡΡ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ ΠΊΠΎΠ΄Π° Π² процСссС Π΅Π³ΠΎ выполнСния. Π₯ΠΎΡ€ΠΎΡˆΠΈΠΉ JIT-ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ способСн Π²Ρ‹ΡΠ²ΠΈΡ‚ΡŒ Π½Π°ΠΈΠ±ΠΎΠ»Π΅Π΅ Π½Π°Π³Ρ€ΡƒΠΆΠ΅Π½Π½Ρ‹Π΅ части прилоТСния (Ρ‚Π°ΠΊΡƒΡŽ Ρ‡Π°ΡΡ‚ΡŒ прилоТСния Π½Π°Π·Ρ‹Π²Π°ΡŽΡ‚ Β«hot spotΒ») ΠΈ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠ΅ Ρ„Ρ€Π°Π³ΠΌΠ΅Π½Ρ‚Ρ‹ ΠΊΠΎΠ΄Π°, Π·Π°ΠΌΠ΅Π½ΠΈΠ² ΠΈΡ… ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ ΠΈ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹ΠΌΠΈ Π²Π°Ρ€ΠΈΠ°Π½Ρ‚Π°ΠΌΠΈ, Ρ‡Π΅ΠΌ Ρ‚Π΅, Ρ‡Ρ‚ΠΎ использовались Ρ€Π°Π½Π΅Π΅. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ ΠΊΠΎΠ³Π΄Π° Π½Π΅ΠΊΠΎΠ΅ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ снова ΠΈ снова выполняСт Π½Π΅ΠΊΠΈΠ΅ дСйствия, подобная оптимизация способна Π·Π½Π°Ρ‡ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΡƒΡΠΊΠΎΡ€ΠΈΡ‚ΡŒ Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΠ΅ Ρ‚Π°ΠΊΠΈΡ… дСйствий. ΠšΡ€ΠΎΠΌΠ΅ Ρ‚ΠΎΠ³ΠΎ, Π½Π΅ Π·Π°Π±Ρ‹Π²Π°ΠΉΡ‚Π΅ ΠΎ Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ Java ΠΈ C\# β€” это языки со строгой Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, поэтому ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ‚ΠΎΡ€ ΠΌΠΎΠΆΠ΅Ρ‚ Π΄Π΅Π»Π°Ρ‚ΡŒ ΠΎ ΠΊΠΎΠ΄Π΅ большС ΠΏΡ€Π΅Π΄ΠΏΠΎΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, ΡΠΏΠΎΡΠΎΠ±ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΡ… ΡƒΠ»ΡƒΡ‡ΡˆΠ΅Π½ΠΈΡŽ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. JIT-компилятор Π΅ΡΡ‚ΡŒ Π² PyPy, ΠΈ, ΠΊΠ°ΠΊ ΡƒΠΆΠ΅ Π±Ρ‹Π»ΠΎ сказано, эта рСализация ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python Π³ΠΎΡ€Π°Π·Π΄ΠΎ быстрСС, Ρ‡Π΅ΠΌ CPython. БвСдСния, ΠΊΠ°ΡΠ°ΡŽΡ‰ΠΈΠ΅ΡΡ сравнСния Ρ€Π°Π·Π½Ρ‹Ρ… ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ΠΎΠ² Python, ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ Π² [этом](https://hackernoon.com/which-is-the-fastest-version-of-python-2ae7c61a6b2b) ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅. ### β–ΠŸΠΎΡ‡Π΅ΠΌΡƒ Π² CPython Π½Π΅ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ JIT-компилятор? Π£ JIT-компиляторов Π΅ΡΡ‚ΡŒ ΠΈ нСдостатки. Один ΠΈΠ· Π½ΠΈΡ… β€” врСмя запуска. CPython ΠΈ Ρ‚Π°ΠΊ запускаСтся ΡΡ€Π°Π²Π½ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎ ΠΌΠ΅Π΄Π»Π΅Π½Π½ΠΎ, Π° PyPy Π² 2-3 Ρ€Π°Π·Π° ΠΌΠ΅Π΄Π»Π΅Π½Π½Π΅Π΅, Ρ‡Π΅ΠΌ CPython. Π”Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя запуска JVM β€” это Ρ‚ΠΎΠΆΠ΅ извСстный Ρ„Π°ΠΊΡ‚. CLR .NET ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΡ‚ эту ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡƒ, Π·Π°ΠΏΡƒΡΠΊΠ°ΡΡΡŒ Π² Ρ…ΠΎΠ΄Π΅ Π·Π°Π³Ρ€ΡƒΠ·ΠΊΠΈ систСмы, Π½ΠΎ Ρ‚ΡƒΡ‚ Π½Π°Π΄ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ, Ρ‡Ρ‚ΠΎ ΠΈ CLR, ΠΈ Ρ‚Π° опСрационная систСма, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ запускаСтся CLR, Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°ΡŽΡ‚ΡΡ ΠΎΠ΄Π½ΠΎΠΉ ΠΈ Ρ‚ΠΎΠΉ ΠΆΠ΅ ΠΊΠΎΠΌΠΏΠ°Π½ΠΈΠ΅ΠΉ. Если Ρƒ вас имССтся ΠΎΠ΄ΠΈΠ½ процСсс Python, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ Ρ€Π°Π±ΠΎΡ‚Π°Π΅Ρ‚ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ΅ врСмя, ΠΏΡ€ΠΈ этом Π² Ρ‚Π°ΠΊΠΎΠΌ процСссС имССтся ΠΊΠΎΠ΄, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ Π±Ρ‹Ρ‚ΡŒ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½, Ρ‚Π°ΠΊ ΠΊΠ°ΠΊ ΠΎΠ½ содСрТит интСнсивно ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ участки, Ρ‚ΠΎΠ³Π΄Π° Π²Π°ΠΌ стоит ΡΠ΅Ρ€ΡŒΡ‘Π·Π½ΠΎ Π²Π·Π³Π»ΡΠ½ΡƒΡ‚ΡŒ Π½Π° ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€, ΠΈΠΌΠ΅ΡŽΡ‰ΠΈΠΉ JIT-компилятор. Однако, CPython β€” это рСализация ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€Π° Python ΠΎΠ±Ρ‰Π΅Π³ΠΎ назначСния. ΠŸΠΎΡΡ‚ΠΎΠΌΡƒ, Ссли Π²Ρ‹ Ρ€Π°Π·Ρ€Π°Π±Π°Ρ‚Ρ‹Π²Π°Π΅Ρ‚Π΅, с использованиСм Python, прилоТСния ΠΊΠΎΠΌΠ°Π½Π΄Π½ΠΎΠΉ строки, Ρ‚ΠΎ Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎΡΡ‚ΡŒ Π΄Π»ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΠ³ΠΎ оТидания запуска JIT-компилятора ΠΏΡ€ΠΈ ΠΊΠ°ΠΆΠ΄ΠΎΠΌ запускС этого прилоТСния сильно Π·Π°ΠΌΠ΅Π΄Π»ΠΈΡ‚ Ρ€Π°Π±ΠΎΡ‚Ρƒ. CPython пытаСтся ΠΎΠ±Π΅ΡΠΏΠ΅Ρ‡ΠΈΡ‚ΡŒ ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΡƒ ΠΊΠ°ΠΊ ΠΌΠΎΠΆΠ½ΠΎ большСго количСства Π²Π°Ρ€ΠΈΠ°Π½Ρ‚ΠΎΠ² использования Python. НапримСр, сущСствуСт возмоТности ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ JIT-компилятора ΠΊ Python, ΠΏΡ€Π°Π²Π΄Π°, [ΠΏΡ€ΠΎΠ΅ΠΊΡ‚](https://www.slideshare.net/AnthonyShaw5/pyjion-a-jit-extension-system-for-cpython), Π² Ρ€Π°ΠΌΠΊΠ°Ρ… ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠ³ΠΎ рСализуСтся эта идСя, развиваСтся Π½Π΅ особСнно Π°ΠΊΡ‚ΠΈΠ²Π½ΠΎ. Π’ Ρ€Π΅Π·ΡƒΠ»ΡŒΡ‚Π°Ρ‚Π΅ ΠΌΠΎΠΆΠ½ΠΎ ΡΠΊΠ°Π·Π°Ρ‚ΡŒ, Ρ‡Ρ‚ΠΎ Ссли Π²Ρ‹, с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Python, ΠΏΠΈΡˆΠ΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡƒ, ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ ΠΌΠΎΠΆΠ΅Ρ‚ ΡƒΠ»ΡƒΡ‡ΡˆΠΈΡ‚ΡŒΡΡ ΠΏΡ€ΠΈ использовании JIT-компилятора β€” ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠΉΡ‚Π΅ ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€ PyPy. ## Python β€” динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ язык Π’ статичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках, ΠΏΡ€ΠΈ объявлСнии ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Ρ…, Π½Π΅ΠΎΠ±Ρ…ΠΎΠ΄ΠΈΠΌΠΎ ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ ΠΈΡ… Ρ‚ΠΈΠΏΡ‹. Π‘Ρ€Π΅Π΄ΠΈ Ρ‚Π°ΠΊΠΈΡ… языков ΠΌΠΎΠΆΠ½ΠΎ ΠΎΡ‚ΠΌΠ΅Ρ‚ΠΈΡ‚ΡŒ C, C++, Java, C\#, Go. Π’ динамичСски Ρ‚ΠΈΠΏΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Ρ… языках понятиС Ρ‚ΠΈΠΏΠ° Π΄Π°Π½Π½Ρ‹Ρ… ΠΈΠΌΠ΅Π΅Ρ‚ Ρ‚ΠΎΡ‚ ΠΆΠ΅ смысл, Π½ΠΎ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ являСтся динамичСским. ``` a = 1 a = "foo" ``` Π’ этом ΠΏΡ€ΠΎΡΡ‚Π΅ΠΉΡˆΠ΅ΠΌ ΠΏΡ€ΠΈΠΌΠ΅Ρ€Π΅ Python сначала создаёт ΠΏΠ΅Ρ€Π²ΡƒΡŽ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΡƒΡŽ `a`, ΠΏΠΎΡ‚ΠΎΠΌ β€” Π²Ρ‚ΠΎΡ€ΡƒΡŽ с Ρ‚Π΅ΠΌ ΠΆΠ΅ ΠΈΠΌΠ΅Π½Π΅ΠΌ, ΠΈΠΌΠ΅ΡŽΡ‰ΡƒΡŽ Ρ‚ΠΈΠΏ `str`, ΠΈ освобоТдаСт ΠΏΠ°ΠΌΡΡ‚ΡŒ, которая Π±Ρ‹Π»Π° Π²Ρ‹Π΄Π΅Π»Π΅Π½Π° ΠΏΠ΅Ρ€Π²ΠΎΠΉ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ `a`. ΠœΠΎΠΆΠ΅Ρ‚ ΠΏΠΎΠΊΠ°Π·Π°Ρ‚ΡŒΡΡ, Ρ‡Ρ‚ΠΎ ΠΏΠΈΡΠ°Ρ‚ΡŒ Π½Π° языках с динамичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ ΡƒΠ΄ΠΎΠ±Π½Π΅Π΅ ΠΈ ΠΏΡ€ΠΎΡ‰Π΅, Ρ‡Π΅ΠΌ Π½Π° языках со статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠ΅ΠΉ, ΠΎΠ΄Π½Π°ΠΊΠΎ, Ρ‚Π°ΠΊΠΈΠ΅ языки созданы Π½Π΅ ΠΏΠΎ Ρ‡ΡŒΠ΅ΠΉ-Ρ‚ΠΎ ΠΏΡ€ΠΈΡ…ΠΎΡ‚ΠΈ. ΠŸΡ€ΠΈ ΠΈΡ… Ρ€Π°Π·Ρ€Π°Π±ΠΎΡ‚ΠΊΠ΅ ΡƒΡ‡Ρ‚Π΅Π½Ρ‹ особСнности Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΊΠΎΠΌΠΏΡŒΡŽΡ‚Π΅Ρ€Π½Ρ‹Ρ… систСм. Всё, Ρ‡Ρ‚ΠΎ написано Π² тСкстС ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹, Π² ΠΈΡ‚ΠΎΠ³Π΅, сводится ΠΊ инструкциям процСссора. Π­Ρ‚ΠΎ ΠΎΠ·Π½Π°Ρ‡Π°Π΅Ρ‚, Ρ‡Ρ‚ΠΎ Π΄Π°Π½Π½Ρ‹Π΅, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡ‹Π΅ ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΠΎΠΉ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, Π² Π²ΠΈΠ΄Π΅ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ² ΠΈΠ»ΠΈ Π΄Ρ€ΡƒΠ³ΠΈΡ… Ρ‚ΠΈΠΏΠΎΠ² Π΄Π°Π½Π½Ρ‹Ρ…, Ρ‚ΠΎΠΆΠ΅ ΠΏΡ€Π΅ΠΎΠ±Ρ€Π°Π·ΡƒΡŽΡ‚ΡΡ ΠΊ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌ структурам. Python выполняСт ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Π΅ прСобразования автоматичСски, программист этих процСссов Π½Π΅ Π²ΠΈΠ΄ΠΈΡ‚, ΠΈ Π·Π°Π±ΠΎΡ‚ΠΈΡ‚ΡŒΡΡ ΠΎ ΠΏΠΎΠ΄ΠΎΠ±Π½Ρ‹Ρ… прСобразованиях Π΅ΠΌΡƒ Π½Π΅ Π½ΡƒΠΆΠ½ΠΎ. ΠžΡ‚ΡΡƒΡ‚ΡΡ‚Π²ΠΈΠ΅ нСобходимости ΡƒΠΊΠ°Π·Ρ‹Π²Π°Ρ‚ΡŒ Ρ‚ΠΈΠΏ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ ΠΏΡ€ΠΈ Π΅Ρ‘ объявлСнии β€” это Π½Π΅ Ρ‚Π° ΠΎΡΠΎΠ±Π΅Π½Π½ΠΎΡΡ‚ΡŒ языка, которая Π΄Π΅Π»Π°Π΅Ρ‚ Python ΠΌΠ΅Π΄Π»Π΅Π½Π½Ρ‹ΠΌ. АрхитСктура языка позволяСт ΡΠ΄Π΅Π»Π°Ρ‚ΡŒ динамичСским практичСски всё, Ρ‡Ρ‚ΠΎ ΡƒΠ³ΠΎΠ΄Π½ΠΎ. НапримСр, Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΡΡ‚ΡŒ ΠΌΠ΅Ρ‚ΠΎΠ΄Ρ‹ ΠΎΠ±ΡŠΠ΅ΠΊΡ‚ΠΎΠ². ΠžΠΏΡΡ‚ΡŒ ΠΆΠ΅, Π²ΠΎ врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌΡ‹ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ Ρ‚Π΅Ρ…Π½ΠΈΠΊΡƒ Β«ΠΎΠ±Π΅Π·ΡŒΡΠ½ΡŒΠΈΡ… ΠΏΠ°Ρ‚Ρ‡Π΅ΠΉΒ» Π² ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠΈ ΠΊ Π½ΠΈΠ·ΠΊΠΎΡƒΡ€ΠΎΠ²Π½Π΅Π²Ρ‹ΠΌ систСмным Π²Ρ‹Π·ΠΎΠ²Π°ΠΌ. Π’ Python Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ практичСски всё. ИмСнно Π°Ρ€Ρ…ΠΈΡ‚Π΅ΠΊΡ‚ΡƒΡ€Π° Python Ρ‡Ρ€Π΅Π·Π²Ρ‹Ρ‡Π°ΠΉΠ½ΠΎ услоТняСт ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΡŽ. Для Ρ‚ΠΎΠ³ΠΎ Ρ‡Ρ‚ΠΎΠ±Ρ‹ ΠΏΡ€ΠΎΠΈΠ»Π»ΡŽΡΡ‚Ρ€ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ эту идСю, я ΡΠΎΠ±ΠΈΡ€Π°ΡŽΡΡŒ Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ инструмСнтом для трассировки систСмных Π²Ρ‹Π·ΠΎΠ²ΠΎΠ² Π² MacOS, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ называСтся DTrace. Π’ Π³ΠΎΡ‚ΠΎΠ²ΠΎΠΌ дистрибутивС CPython Π½Π΅Ρ‚ ΠΌΠ΅Ρ…Π°Π½ΠΈΠ·ΠΌΠΎΠ² ΠΏΠΎΠ΄Π΄Π΅Ρ€ΠΆΠΊΠΈ DTrace, поэтому CPython Π½ΡƒΠΆΠ½ΠΎ Π±ΡƒΠ΄Π΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΊΠΎΠΌΠΏΠΈΠ»ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ с ΡΠΎΠΎΡ‚Π²Π΅Ρ‚ΡΡ‚Π²ΡƒΡŽΡ‰ΠΈΠΌΠΈ настройками. Π’ΡƒΡ‚ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ΡΡ вСрсия 3.6.6. Π˜Ρ‚Π°ΠΊ, Π²ΠΎΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅ΠΌΡΡ ΡΠ»Π΅Π΄ΡƒΡŽΡ‰Π΅ΠΉ ΠΏΠΎΡΠ»Π΅Π΄ΠΎΠ²Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ дСйствий: ``` wget https://github.com/python/cpython/archive/v3.6.6.zip unzip v3.6.6.zip cd v3.6.6 ./configure --with-dtrace make ``` Π’Π΅ΠΏΠ΅Ρ€ΡŒ, ΠΏΠΎΠ»ΡŒΠ·ΡƒΡΡΡŒ `python.exe`, ΠΌΠΎΠΆΠ½ΠΎ ΠΏΡ€ΠΈΠΌΠ΅Π½ΡΡ‚ΡŒ DTRace для трассировки ΠΊΠΎΠ΄Π°. Об использовании DTrace с Python ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΡ‡ΠΈΡ‚Π°Ρ‚ΡŒ [здСсь](https://github.com/paulross/dtrace-py#the-lightning-talk). А Π²ΠΎΡ‚ [Ρ‚ΡƒΡ‚](https://github.com/paulross/dtrace-py/tree/master/toolkit) ΠΌΠΎΠΆΠ½ΠΎ Π½Π°ΠΉΡ‚ΠΈ скрипты для измСрСния с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ DTrace Ρ€Π°Π·Π»ΠΈΡ‡Π½Ρ‹Ρ… ΠΏΠΎΠΊΠ°Π·Π°Ρ‚Π΅Π»Π΅ΠΉ Ρ€Π°Π±ΠΎΡ‚Ρ‹ Python-ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ. Π‘Ρ€Π΅Π΄ΠΈ Π½ΠΈΡ… β€” ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ Π²Ρ‹Π·ΠΎΠ²Π° Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ, врСмя выполнСния ΠΏΡ€ΠΎΠ³Ρ€Π°ΠΌΠΌ, врСмя использования процСссора, свСдСния ΠΎ систСмных Π²Ρ‹Π·ΠΎΠ²Π°Ρ… ΠΈ Ρ‚Π°ΠΊ Π΄Π°Π»Π΅Π΅. Π’ΠΎΡ‚ ΠΊΠ°ΠΊ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒΡΡ ΠΊΠΎΠΌΠ°Π½Π΄ΠΎΠΉ `dtrace`: ``` sudo dtrace -s toolkit/<tracer>.d -c β€˜../cpython/python.exe script.py’ ``` А Π²ΠΎΡ‚ ΠΊΠ°ΠΊ срСдство трассировки `py_callflow` ΠΏΠΎΠΊΠ°Π·Ρ‹Π²Π°Π΅Ρ‚ Π²Ρ‹Π·ΠΎΠ²Ρ‹ Ρ„ΡƒΠ½ΠΊΡ†ΠΈΠΉ Π² ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΈ. ![](https://habrastorage.org/getpro/habr/post_images/13e/bd4/926/13ebd492636a94b23400305293aec346.gif) *Врассировка с использованиСм DTrace* Π’Π΅ΠΏΠ΅Ρ€ΡŒ ΠΎΡ‚Π²Π΅Ρ‚ΠΈΠΌ Π½Π° вопрос ΠΎ Ρ‚ΠΎΠΌ, влияСт Π»ΠΈ динамичСская типизация Π½Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Python. Π’ΠΎΡ‚ Π½Π΅ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Π΅ сообраТСния ΠΏΠΎ этому ΠΏΠΎΠ²ΠΎΠ΄Ρƒ: - ΠŸΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° ΠΈ конвСрсия Ρ‚ΠΈΠΏΠΎΠ² β€” ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ тяТёлыС. ΠšΠ°ΠΆΠ΄Ρ‹ΠΉ Ρ€Π°Π·, ΠΊΠΎΠ³Π΄Π° выполняСтся ΠΎΠ±Ρ€Π°Ρ‰Π΅Π½ΠΈΠ΅ ΠΊ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½ΠΎΠΉ, Π΅Ρ‘ Ρ‡Ρ‚Π΅Π½ΠΈΠ΅ ΠΈΠ»ΠΈ запись, производится ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ° Ρ‚ΠΈΠΏΠ°. - Π―Π·Ρ‹ΠΊ, ΠΎΠ±Π»Π°Π΄Π°ΡŽΡ‰Π΅ΠΉ ΠΏΠΎΠ΄ΠΎΠ±Π½ΠΎΠΉ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒΡŽ, слоТно ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ. ΠŸΡ€ΠΈΡ‡ΠΈΠ½Π°, ΠΏΠΎ ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΉ Π΄Ρ€ΡƒΠ³ΠΈΠ΅ языки Π½Π°ΡΡ‚ΠΎΠ»ΡŒΠΊΠΎ быстрСС Python, Π·Π°ΠΊΠ»ΡŽΡ‡Π°Π΅Ρ‚ΡΡ Π² Ρ‚ΠΎΠΌ, Ρ‡Ρ‚ΠΎ ΠΎΠ½ΠΈ ΠΈΠ΄ΡƒΡ‚ Π½Π° Ρ‚Π΅ ΠΈΠ»ΠΈ ΠΈΠ½Ρ‹Π΅ компромиссы, выбирая ΠΌΠ΅ΠΆΠ΄Ρƒ Π³ΠΈΠ±ΠΊΠΎΡΡ‚ΡŒΡŽ ΠΈ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒΡŽ. - ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ [Cython](http://cython.org/) ΠΎΠ±ΡŠΠ΅Π΄ΠΈΠ½ΡΠ΅Ρ‚ Python ΠΈ ΡΡ‚Π°Ρ‚ΠΈΡ‡Π΅ΡΠΊΡƒΡŽ Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΡŽ, Ρ‡Ρ‚ΠΎ, Π½Π°ΠΏΡ€ΠΈΠΌΠ΅Ρ€, ΠΊΠ°ΠΊ ΠΏΠΎΠΊΠ°Π·Π°Π½ΠΎ Π² [этом ΠΌΠ°Ρ‚Π΅Ρ€ΠΈΠ°Π»Π΅](http://notes-on-cython.readthedocs.io/en/latest/std_dev.html), ΠΏΡ€ΠΈΠ²ΠΎΠ΄ΠΈΡ‚ ΠΊ 84-ΠΊΡ€Π°Ρ‚Π½ΠΎΠΌΡƒ росту ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Π² сравнСнии с ΠΏΡ€ΠΈΠΌΠ΅Π½Π΅Π½ΠΈΠ΅ΠΌ ΠΎΠ±Ρ‹Ρ‡Π½ΠΎΠ³ΠΎ Python. ΠžΠ±Ρ€Π°Ρ‚ΠΈΡ‚Π΅ Π²Π½ΠΈΠΌΠ°Π½ΠΈΠ΅ Π½Π° этот ΠΏΡ€ΠΎΠ΅ΠΊΡ‚, Ссли Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° ΡΠΊΠΎΡ€ΠΎΡΡ‚ΡŒ. ## Π˜Ρ‚ΠΎΠ³ΠΈ ΠŸΡ€ΠΈΡ‡ΠΈΠ½ΠΎΠΉ нСвысокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Python являСтся Π΅Π³ΠΎ динамичСская ΠΏΡ€ΠΈΡ€ΠΎΠ΄Π° ΠΈ ΡƒΠ½ΠΈΠ²Π΅Ρ€ΡΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ. Π•Π³ΠΎ ΠΌΠΎΠΆΠ½ΠΎ ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚ΡŒ ΠΊΠ°ΠΊ инструмСнт для Ρ€Π΅ΡˆΠ΅Π½ΠΈΡ Ρ€Π°Π·Π½ΠΎΠΎΠ±Ρ€Π°Π·Π½Π΅ΠΉΡˆΠΈΡ… Π·Π°Π΄Π°Ρ‡. Для достиТСния Ρ‚Π΅Ρ… ΠΆΠ΅ Ρ†Π΅Π»Π΅ΠΉ ΠΌΠΎΠΆΠ½ΠΎ ΠΏΠΎΠΏΡ‹Ρ‚Π°Ρ‚ΡŒΡΡ ΠΏΠΎΠΈΡΠΊΠ°Ρ‚ΡŒ Π±ΠΎΠ»Π΅Π΅ ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½Ρ‹Π΅, Π»ΡƒΡ‡ΡˆΠ΅ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹Π΅ инструмСнты. Π’ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ, Π½Π°ΠΉΡ‚ΠΈ ΠΈΡ… удастся, Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎ β€” Π½Π΅Ρ‚. ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΡ, написанныС Π½Π° Python, ΠΌΠΎΠΆΠ½ΠΎ ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·ΠΈΡ€ΠΎΠ²Π°Ρ‚ΡŒ, ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡ возмоТности ΠΏΠΎ асинхронному Π²Ρ‹ΠΏΠΎΠ»Π½Π΅Π½ΠΈΡŽ ΠΊΠΎΠ΄Π°, инструмСнты профилирования, ΠΈ β€” ΠΏΡ€Π°Π²ΠΈΠ»ΡŒΠ½ΠΎ подбирая ΠΈΠ½Ρ‚Π΅Ρ€ΠΏΡ€Π΅Ρ‚Π°Ρ‚ΠΎΡ€. Π’Π°ΠΊ, для ΠΎΠΏΡ‚ΠΈΠΌΠΈΠ·Π°Ρ†ΠΈΠΈ скорости Ρ€Π°Π±ΠΎΡ‚Ρ‹ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠΉ, врСмя запуска ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… Π½Π΅Π²Π°ΠΆΠ½ΠΎ, Π° ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΊΠΎΡ‚ΠΎΡ€Ρ‹Ρ… ΠΌΠΎΠΆΠ΅Ρ‚ Π²Ρ‹ΠΈΠ³Ρ€Π°Ρ‚ΡŒ ΠΎΡ‚ использования JIT-компилятора, рассмотритС Π²ΠΎΠ·ΠΌΠΎΠΆΠ½ΠΎΡΡ‚ΡŒ использования PyPy. Если Π²Π°ΠΌ Π½ΡƒΠΆΠ½Π° максимальная ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ ΠΈ Π²Ρ‹ Π³ΠΎΡ‚ΠΎΠ²Ρ‹ ΠΊ ограничСниям статичСской Ρ‚ΠΈΠΏΠΈΠ·Π°Ρ†ΠΈΠΈ β€” взглянитС Π½Π° Cython. **Π£Π²Π°ΠΆΠ°Π΅ΠΌΡ‹Π΅ Ρ‡ΠΈΡ‚Π°Ρ‚Π΅Π»ΠΈ\!** Как Π²Ρ‹ Ρ€Π΅ΡˆΠ°Π΅Ρ‚Π΅ ΠΏΡ€ΠΎΠ±Π»Π΅ΠΌΡ‹ нСвысокой ΠΏΡ€ΠΎΠΈΠ·Π²ΠΎΠ΄ΠΈΡ‚Π΅Π»ΡŒΠ½ΠΎΡΡ‚ΠΈ Python? [![](https://habrastorage.org/r/w1560/files/1ba/550/d25/1ba550d25e8846ce8805de564da6aa63.png)](https://ruvds.com/ru-rub/#order)
Shard134 (laksa)
Root Hash14843476518697139734
Unparsed URLcom,habr!/ru/companies/ruvds/articles/418823/ s443