Python Dispatch: Gör GIL valfri

Styrningsrådet har gjort följande ett stort tillkännagivande om framtiden för Python. De har nämligen beslutat att göra Global Interpreter Lock (GIL) valfritt i CPython och så småningom ta bort GIL helt och hållet.

Detta är ett enormt beslut som kommer att förändra Python i grunden.

Därför kommer jag i det här inlägget att gå igenom vad GIL är, dess fördelar och nackdelar och vad framtiden har att erbjuda.

GIL

Låt mig gå igenom det globala tolklåset ett ord i taget i omvänd ordning, med början med lås och därefter tolk och slutligen, global.

Ett lås är en mekanism som gör att endast en tråd kan köras åt gången. Så när en tråd får tag i låset får den exklusiv åtkomst till Python-tolken.

En tolken är programmet för att exekvera Python-kod.

Ordet "global" syftar här på tolklåsets omfattning. Eftersom tolklåset är globalt garanterar det att endast en tråd åt gången exekverar Python-kod inom en och samma process.

Kredit: StatusNeo.

GIL är alltså en mekanism som förhindrar att flera trådar körs samtidigt genom tolken. Men varför skulle man vilja det?

Fördelar

Den främsta fördelen med GIL är att det gör saker enklare. Det är lättare att hantera minnet, det är lättare att hantera trådar och det är lättare att skapa moduler.

Utan GIL kan du snabbt stöta på problem med multitrådning. Om du inte sätter in rätt lokala lås för varje tråd kan det sluta med att Python kraschar eller att något annat minne i datorn skadas.

Och om du inte använder multithreading är GIL till stor hjälp, eftersom den ser till att allt går smidigt.

Så GIL håller saker och ting enkla och säkra.

Varför skulle du då inte vilja det?

Nackdelar

Avvägningen här är enkelhet mot snabbhet.

Genom att förhindra multitrådning gör GIL CPython långsammare och mindre högpresterande än vissa andra språk (som C++, Go och Rust).

Särskilt med den explosionsartade utvecklingen av AI under de senaste månaderna blir GIL ett allt större problem när det gäller att exekvera program snabbt och effektivt.

GIL:s framtid

Så nu när styrningsrådet har meddelat att de har accepterat Python Enhancement Proposal (PEP) 703, skrivet av Sam GrossVi är på väg in på okänt vatten.

Otaliga tillägg har skrivits med GIL i åtanke. Alla standarder som sätts med CPython är beroende av GIL. Alla bygger i CPython med GIL i centrum för sina program (antingen avsiktligt eller inte).

Styrningsrådet gör därför inledningsvis GIL frivilligt, men på lång sikt planerar de att fasa ut GIL helt och hållet.

Som de uttryckte det i inlägget: "Vi vill inte skapa en permanent uppdelning mellan with-GIL och no-GIL builds (och tilläggsmoduler)."

Detta kommer att förändra Python fullständigt och, kanske mest intressant, på sätt som ingen ännu vet. Brett Cannon, i en enkät till kärnutvecklarteamet, skrev att "att göra Python fritt trådat... har många okända faktorer. Vi vet inte hur mycket kod som implicit förlitar sig på GIL, eller tråd-osäker på subtila sätt som maskeras av GIL."

GIL försvinner - vad tar den med sig?

Och, ännu viktigare, hur kommer det nya CPython att se ut?

Lämna en kommentar