Differences between revisions 1 and 2
Revision 1 as of 2009-04-13 10:24:43
Size: 1590
Editor: anonymous
Comment:
Revision 2 as of 2009-04-14 07:04:02
Size: 1583
Editor: anonymous
Comment:
Deletions are marked like this. Additions are marked like this.
Line 5: Line 5:
Viene usata nelle definizione di funzioni ''microfunc'' per far si che ci sia un solo microthread per l'esecuzione di una certa funzione, che in esso le varie chiamate siano eseguite in sequenza e che, allo stesso tempo, il chiamante di quella funzione non risulti mai bloccato dalla chiamata. Il microthread incaricato di eseguire queste chiamate in sequenza nel programma netsukuku è il cosidetto ''dispatcher''. Viene usata nelle definizione di funzioni ''microfunc'' per far si che ci sia un solo microthread per l'esecuzione di una certa funzione, che in esso le varie chiamate siano eseguite in sequenza e che, allo stesso tempo, il chiamante di quella funzione non risulti mai bloccato dalla chiamata. Il microthread incaricato di eseguire queste chiamate in sequenza nel programma netsukuku è chiamato ''dispatcher''.
Line 13: Line 13:
Tramite l'uso dell'attributo {{{balance}}} del {{{channel}}} si evita che, nel caso sopra descritto, le chiamate vengano accodate alla maniera classica. Invece si memorizzano in una sequence che il ''dispatcher'' prenderà in considerazione non appena potrà. Tramite l'uso dell'attributo {{{balance}}} del {{{channel}}} si evita che, nel caso sopra descritto, le chiamate vengano accodate alla maniera classica. Invece si memorizzano in una lista che il ''dispatcher'' prenderà in considerazione non appena potrà.

La classe Channel

E' un wrapper della classe stackless.channel.

Viene usata nelle definizione di funzioni microfunc per far si che ci sia un solo microthread per l'esecuzione di una certa funzione, che in esso le varie chiamate siano eseguite in sequenza e che, allo stesso tempo, il chiamante di quella funzione non risulti mai bloccato dalla chiamata. Il microthread incaricato di eseguire queste chiamate in sequenza nel programma netsukuku è chiamato dispatcher.
Per far questo si estendono le funzionalità fornite dalla classe stackless.channel per la trasmissione/ricezione di messaggi tra tasklet.
Con la normale classe stackless.channel quando una tasklet sta in ascolto per un messaggio che non è stato ancora inviato, questa tasklet non è presa in considerazione dallo schedulatore e quindi non impegna la CPU. Questo va bene anche al programma netsukuku.
Ma quando una tasklet invia un messaggio su un canale dove nessuno sta in ascolto (in netsukuku avviene quando il dispatcher è ancora impegnato dalla precedente chiamata) questa tasklet chiamante viene bloccata. Questo non va bene al programma netsukuku.
Tramite l'uso dell'attributo balance del channel si evita che, nel caso sopra descritto, le chiamate vengano accodate alla maniera classica. Invece si memorizzano in una lista che il dispatcher prenderà in considerazione non appena potrà.

TODO: spiegare l'uso del costruttore con micro_send=True, cosa comporta e quando viene usato in netsukuku.

Netsukuku/ita/ClasseChannel (last edited 2009-05-06 11:19:27 by lukisi)