{{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?]]