{{htmlmetatags>metatag-robots=()
metatag-title=(Multithreading su retrocomputer)
metatag-keywords=(Multithreading,Commodore 64,Commodore VIC20,Atari,Commodore128,MIDRES Library,6502,6510)
metatag-description=(Come implementare il multithreading veloce ed efficiente su computer con risorse limitate.)
metatag-media-og:image=(:mt6502yy.png)
metatag-og:title=(Multithreading su retrocomputer)
metatag-og:description=(Come implementare il multithreading veloce ed efficiente su computer con risorse limitate.)
}}
====== Multithreading sui retrocomputer 6502/6510 ======
===== PREMESSA: DAI THREAD AI PROTOTHREAD =====
In informatica il multithreading indica il supporto nell'esecuzione di più "thread" o flussi di esecuzione. Nei sistemi con forti vincoli di memoria come i computer basati sui processori 6502/6510, il multi-threading tradizionale può determinare un eccessivo sovraccarico di memoria. Nel multi-threading tradizionale, infatti, ogni thread richiede il proprio stack che occupa, a sua volta, parti estese della memoria disponibile.
{{ :tutorial_protothread.png?nolink&400 |}}
Grazie ad alcune caratteristiche specifiche del linguaggio C è possibile costruire una serie di "macro" che permettono di implementare una funzionalità analoga, ma più leggera, dei thread: i **protothread** ((questo articolo illustrerà come usare la funzionalità esposta dalle primitive della [[:it:midres_library|libreria MIDRES]]; tali primitive sono **fortemente ispirate** alla [[http://dunkels.com/adam/pt/|protothreads library]] scritta da Adam Dunkels con il supporto di Oliver Schmidt, al quale si rimanda per eventuali approfondimenti)). Lo scopo dei protothread è implementare un flusso sequenziale di controllo senza implementare automi a stati finiti complessi e senza ricadere, necessariamente, nel caso di un multi-threading completo.
I protothread sono estremamente leggeri (ognuno di essi richiede solo due byte di memoria per funzionare), sono privi di stack e forniscono un contesto (semantico) ad un sistema basato su eventi. Il fatto di essere privi di stack li rende particolarmente utili in quei contesti dove la velocità è essenziale e l'occupazione di spazio critica.
**I protothread sono implementati in C puro** e non richiedono alcun codice assembler specifico per la macchina. Possono essere quindi utilizzati su tutte le piattaforme che suportano il compilatore C e, di conseguenza, anche in quelle supportate dalla [[:it:midres_library|libreria MIDRES]].
Questo tutorial illustrerà come usare la funzionalità esposta dalle primitive della libreria MIDRES, e la loro applicazione al [[:it:elevator|gioco "The Elevator"]].
===== INDICE =====
* [[:it:mt6502:defining|COME DEFINIRE UN PROTOTHREAD]]
* [[:it:mt6502:coordinate|COORDINARE I PROTOTHREAD]]
* [[:it:mt6502:blocking|FUNZIONI BLOCCANTI E NON BLOCCANTI]]
* [[:it:mt6502:locals|COME GESTIRE LE VARIABILI LOCALI]]
* [[:it:mt6502:helloworld|"HELLO WORLD" CON DUE PROTOTHREAD]]
* [[:it:mt6502:walking|ANIMAZIONI CON I PROTOTHREAD]]
* [[:it:mt6502:midres|COME SONO IMPLEMENTATI NELLA MIDRES LIBRARY?]]