πΉ ΠΠΎΠ³Π΄Π° Π»ΡΡΡΠ΅ threading, Π° ΠΊΠΎΠ³Π΄Π° asyncio? πΈ ΠΠ΅Π· ΠΊΠΎΠ½ΠΊΡΡΠ΅Π½ΡΠ½ΠΎΡΡΠΈ (concurrency) ΠΏΡΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ ΠΏΡΠΎΡΡΠ°ΠΈΠ²Π°Π΅Ρ ΠΏΡΠΈ I/O: ΠΊΠ»ΠΈΠ΅Π½ΡΡ ΠΆΠ΄ΡΡ, throughput ΠΏΠ°Π΄Π°Π΅Ρ. threading ΠΈ asyncio Π΄Π°ΡΡ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΡΡΡ (parallelism) ΡΠ°Π·Π½ΡΠΌΠΈ ΡΠΏΠΎΡΠΎΠ±Π°ΠΌΠΈ, ΡΡΠΎΠ±Ρ Π½Π΅ Π±Π»ΠΎΠΊΠΈΡΠΎΠ²Π°ΡΡ ΠΏΡΠΎΡΠ΅ΡΡ. πΈ threading β ΡΡΠΎ OSβΠΏΠΎΡΠΎΠΊΠΈ. ΠΡΠΎΡΡΠ°Ρ ΠΌΠΎΠ΄Π΅Π»Ρ: Π·Π°ΠΏΡΡΡΠΈΠ» ΡΡΠ½ΠΊΡΠΈΡ Π² Thread. Π₯ΠΎΡΠΎΡΠΎ Π΄Π»Ρ Π±Π»ΠΎΠΊΠΈΡΡΡΡΠ΅Π³ΠΎ I/O ΠΈ ΠΊΠΎΠ³Π΄Π° Π΅ΡΡΡ CβΡΠ°ΡΡΠΈΡΠ΅Π½ΠΈΡ, ΠΊΠΎΡΠΎΡΡΠ΅ ΠΎΡΠ²ΠΎΠ±ΠΎΠΆΠ΄Π°ΡΡ GIL (Global Interpreter Lock). πΈ GIL (Global Interpreter Lock) ΠΌΠ΅ΡΠ°Π΅Ρ ΡΠ΅Π°Π»ΡΠ½ΠΎΠΉ ΠΏΠ°ΡΠ°Π»Π»Π΅Π»ΡΠ½ΠΎΡΡΠΈ PythonβΠ±Π°ΠΉΡΠΊΠΎΠ΄Π°: Π΄Π»Ρ CPUβbound Π·Π°Π΄Π°Ρ threading Π½Π΅ Π΄Π°ΡΡ ΡΡΠΊΠΎΡΠ΅Π½ΠΈΡ β ΠΈΡΠΏΠΎΠ»ΡΠ·ΡΠΉΡΠ΅ multiprocessing ΠΈΠ»ΠΈ C/Π½Π°ΡΠΈΠ²Π½ΡΠ΅ Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊΠΈ. πΈ asyncio β ΠΎΠ΄Π½Π° Π½ΠΈΡΡ + event loop. ΠΠΊΠΎΠ½ΠΎΠΌΠΈΡ ΠΏΠ°ΠΌΡΡΡ ΠΈ ΠΌΠ°ΡΡΡΠ°Π±ΠΈΡΡΠ΅ΡΡΡ ΠΏΡΠΈ ΡΡΡΡΡΠ°Ρ
ΠΎΠ΄Π½ΠΎΠ²ΡΠ΅ΠΌΠ΅Π½Π½ΡΡ
I/O, Π½ΠΎ ΡΡΠ΅Π±ΡΠ΅Ρ asyncβΡΠΎΠ²ΠΌΠ΅ΡΡΠΈΠΌΡΡ
Π±ΠΈΠ±Π»ΠΈΠΎΡΠ΅ΠΊ ΠΈ Π΄ΡΡΠ³ΠΎΠΉ Π°ΡΡ
ΠΈΡΠ΅ΠΊΡΡΡΡ ΠΊΠΎΠ΄Π°. import asyncio async def task(n): await asyncio.sleep(1) return n async def main(): await asyncio.gather(*(task(i) for i in range(1000))) asyncio.run(main()) π ΠΠ»Ρ many I/O β asyncio; Π΄Π»Ρ ΠΏΡΠΎΡΡΠΎΡΡ ΠΈ CβΠΊΠΎΠ΄a β thr
πΉ ΠΠ°ΡΠ°Π»Π»Π΅Π»ΠΈΠ·ΠΌ Π² Python: threading vs asyncio
Π‘Π΅Π³ΠΎΠ΄Π½ΡΠ‘Π΅Π³ΠΎΠ΄Π½Ρ
~1 ΠΌΠΈΠ½