Python fără stive - Stackless Python
| Autori originali | Christian Tismer |
|---|---|
| Dezvoltatori | Anselm Kruis |
| Eliberarea inițială | 1998 |
| Versiune stabila | 3,7,5-slp, 3,6,9-slp, 2,7,17-slp / 22 ianuarie 2020
|
| Previzualizare lansare | 3.8.0b3
|
| Repertoriu |
|
| Scris in | C , Python |
| Sistem de operare | Linux , Windows |
| Tip | Interpret |
| Licență | Licența Python Software Foundation |
| Site-ul web | http://www.stackless.com |
Stackless Python , sau Stackless , este un interpretor de limbaj de programare Python , numit astfel deoarece evită să depindă de stiva de apeluri C pentru propria stivă. În practică, Stackless Python folosește stiva C, dar stiva este ștearsă între apelurile funcționale. Cea mai importantă caracteristică a Stackless este microthreads , care să evite o mare parte a aeriene asociate cu sisteme de operare uzuale fire . În plus față de funcțiile Python, Stackless adaugă și suport pentru coroutine , canale de comunicații și serializarea sarcinilor .
Proiecta
Cu Stackless Python, un program în execuție este împărțit în microfile care sunt gestionate de interpretul de limbă în sine, nu de nucleul sistemului de operare - comutarea contextului și planificarea sarcinilor se face pur și simplu în interpret (acestea sunt, de asemenea, considerate ca o formă de fir verde ) . Microthread-urile gestionează execuția diferitelor sub-sarcini într-un program pe același nucleu CPU. Astfel, acestea reprezintă o alternativă la programarea asincronă bazată pe evenimente și evită, de asemenea, suprasolicitarea utilizării firelor separate pentru programele cu un singur nucleu (deoarece nu trebuie efectuată nicio comutare între modul utilizator și modul kernel, astfel încât utilizarea procesorului poate fi redusă).
Deși microtirurile fac mai ușor să se ocupe de rularea subtaskurilor pe un singur nucleu, Stackless Python nu elimină blocajul de interpretare global al CPython și nici nu folosește mai multe fire și / sau procese. Deci, permite doar multitasking-ul cooperativ pe un CPU partajat și nu paralelismul (preempțiunea nu era inițial disponibilă, dar este acum într-o anumită formă). Pentru a utiliza mai multe nuclee CPU, ar trebui totuși să construiți un sistem de comunicație interproces pe deasupra proceselor Stackless Python.
Datorită numărului considerabil de modificări ale sursei, Stackless Python nu poate fi instalat pe o instalare Python preexistentă ca extensie sau bibliotecă . În schimb, este o distribuție completă Python în sine. Majoritatea caracteristicilor Stackless au fost implementate și în PyPy , un interpret Python auto-găzduit și un compilator JIT .
Utilizare
Deși toată Stackless este o distribuție separată, funcționalitatea de comutare a fost ambalat cu succes ca CPython extensie numit greenlet. Este folosit de mai multe biblioteci (de exemplu, gevent) pentru a oferi o soluție de filetare verde pentru CPython. Python a primit de atunci o soluție nativă pentru firele verzi: await / async.
Stackless este utilizat pe scară largă în implementarea jocului online multiplayer masiv Eve Online , precum și în platforma de e-mail IronPort .
Vezi si
- Erlang (limbaj de programare)
- Limbo (limbaj de programare)
- Go (limbaj de programare)
- SCOOP (software)
Referințe
linkuri externe
-
Site oficial
- Documentație Python fără stive pentru: 3.7-slp , 3.6-slp , 3.5-slp , 3.4-slp , 2.7-slp
- fără stive pe GitHub
- Script de joc cu mai multe fire cu Python Stackless de Harry Kalogirou
- Continuări și Python fără stive de Christian Tismer