Protothread - Protothread

Un protothread è un meccanismo a basso overhead per la programmazione simultanea .

Protothreads funzionano come stackless , leggeri fili , o coroutine , fornendo un contesto blocco economico utilizzando il minimo per protothread (dell'ordine di singoli byte).

I protothread vengono utilizzati per realizzare una forma di concorrenza non anticipata nota come multitasking cooperativo e, pertanto, non incorre nel cambio di contesto quando si cede a un altro thread. All'interno di un protothread, il cedimento si ottiene utilizzando il dispositivo di Duff all'interno della funzione di un thread e una variabile esterna utilizzata all'interno dell'istruzione switch . Ciò consente di saltare (riprendere) da un rendimento a un'altra chiamata di funzione. Per bloccare i thread, questi rendimenti possono essere protetti da un condizionale in modo che le chiamate successive alla stessa funzione produrranno a meno che il condizionale guard non sia vero.

Una caratteristica dei protothread rispetto ad altre implementazioni di coroutine , o thread appropriati, è che sono senza stack. Ciò presenta vantaggi e svantaggi. Uno svantaggio è che non ci si può fidare che le variabili locali all'interno del protothread abbiano mantenuto i propri valori durante una resa in un altro contesto. Devono mantenere il loro stato attraverso l'uso di variabili statiche o esterne, spesso globali . Un vantaggio è che sono molto leggeri e quindi utili su sistemi fortemente limitati dalla memoria come piccoli microcontrollori in cui altre soluzioni sono poco pratiche o meno desiderabili.

Tom Duff , famoso per i dispositivi di Duff , aveva questo da dire sulle carenze del metodo: "un trucco simile per macchine a stati guidate da interruzioni che è troppo orribile per entrare. [...] Non ho mai pensato che fosse un generale adeguato -provare l'implementazione della coroutine perché non è facile avere più attivazioni simultanee di una coroutine e non è possibile utilizzare questo metodo per fare in modo che le coroutine rinunciano al controllo ovunque ma nella loro routine di primo livello. Una semplice libreria di commutazione dello stack in linguaggio assembly ti consente di farlo entrambi. "

Il concetto di protothread è stato sviluppato da Adam Dunkels e Oliver Schmidt, sulla base del lavoro precedente di Simon Tatham e Tom Duff .

Guarda anche

Riferimenti

link esterno