CPython: differenze tra le versioni

Contenuto cancellato Contenuto aggiunto
Nessun oggetto della modifica
Etichette: Modifica visuale Link a pagina di disambiguazione
Nessun oggetto della modifica
Riga 9:
|Genere = Interprete linguaggio programmazione Python
|Licenza = [[Python Software Foundation License]]
|Lingua = [[Lingua inglese|Inglese]]
|SoftwareLibero = sì
|SitoWeb = {{URL|https://www.python.org/}}
Riga 22:
 
== Progetto ==
Una caratteristica particolare di CPython è che utilizza ''[[Global Interpreter Lock (GIL)]],'', <ref>{{Cite web|url=https://docs.python.org/3/glossary.html#term-global-interpreter-lock|title=global interpreter lock in CPython|language=Inglese}}</ref> un meccanismo che permette l'esecuzione di un solo [[Thread (informatica)|thread]] Python alla volta su un singolo processore. <ref>{{Cita web|url=https://docs.python.org/3/c-api/init.html|dataaccesso=2020-06-04}}</ref> Questo non significa che il [[multithreading]] non abbia senso: ad esempio se il tuo codice è spesso in attesa di input/output, rilascia il GIL, permettendo ad altri thread di essere eseguiti.
 
Questa potrebbe essere la situazione tipica quando più thread servono client separati. Un thread potrebbe essere in attesa della risposta da un client, un altro potrebbe essere in attesa dell'esecuzione di una query [[Base di dati|al database]], mentre il terzo thread sta elaborando il codice Python.
Riga 28:
L'utilizzo di GIL rende CPython inadatto ai processi che implementano algoritmi ad alta intensità di [[CPU]] e che potrebbero essere distribuiti su più [[Processore multicore|core]].
 
Nelle applicazioni reali sono piuttosto rare le situazioni in cui il GIL rappresenta un collo di bottiglia significativo. Questo perché Python è un linguaggio intrinsecamente lento e generalmente non utilizzato per operazioni che richiedono un uso intensivo della [[CPU]] o che richiedono bassi tempi di risposta. Python è solitamente utilizzato ad alto livello e richiama funzioni e librerie per eseguire attività specializzate. Tali librerie non sono scritte in Python e, il codice Python in un altro thread, può essere eseguito mentre viene eseguita una chiamata a uno di questi processi sottostanti. Le librerie non Python non sono soggette a GIL e possono eseguire contemporaneamente molti thread su più processori senza restrizioni.
 
Per ottenere vera concorrenza in Python, è necessario ricorrere a processi dell'interprete Cpython separati e gestiti dal sistema operativo. La comunicazione tra processi separati può essere più complessa rispetto alla comunicazione tra thread. Il modulo ''multiprocessing'' offre alcune soluzioni, ma può ancora introdurre overhead.
Riga 34:
La presenza del GIL semplifica l'implementazione di CPython e facilita l'implementazione di applicazioni multi-thread che non traggono vantaggio dall'esecuzione simultanea di codice Python. Senza GIL, la concorrenza diventerebbe responsabilità dello sviluppatore che dovrebbe gestire esplicitamente la sincronizzazione tra i diversi thread per evitare [[race conditions]] e altri problemi legati alla [[Concorrenza (informatica)|concorrenza]].
 
Sebbene siano state avanzate numerose proposte per eliminare GIL ma considerando una serie di fattori complessi è stato deciso di mantenerlo. Sebbene GIL possa limitare le prestazioni in alcune applicazioni, offre un buon compromesso tra semplicità, stabilità e prestazioni per la maggior parte degli sviluppatori Python. Per consentire un maggiore parallelismo, nell'ottobre 2023 è stato rilasciato un miglioramento che permette l'utilizzo di un GIL separato per sottointerpretesotto-interprete in un singolo processo Python e sono stati descritti come "thread con condivisione opt-in". <ref>{{Cita web|url=https://lwn.net/Articles/941090/|autore=Jake Edge|dataaccesso=2024-01-13}}</ref> <ref>{{Cita web|url=https://peps.python.org/pep-0684/|dataaccesso=2024-01-13}}</ref>
 
Dopo diversi dibattiti, nel 2023 è stato lanciato un progetto per proporre di rendere GIL opzionale dalla versione 3.13 di Python, <ref>{{Cita web|url=https://peps.python.org/pep-0703/|sito=peps.python.org|lingua=en|dataaccesso=2023-09-17}}</ref> la cui uscita è prevista per ottobre 2024. <ref>{{Cita web|url=https://peps.python.org/pep-0719/#schedule|sito=peps.python.org|dataaccesso=2023-09-17}}</ref>