Pages: [1]   Go Down
Print
Author Topic: [PICT] - Produttore consumatore  (Read 1818 times)
0 Members e 1 Utente non registrato stanno visualizzando questa discussione.
alex180788
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 422


« on: 23-09-2014, 14:55:08 »

Ciao a tutti, nell'esempio del produttore-consumatore in PICT come mai il consumer avvia il processo "consumer!channel" se utilizzando il costrutto def sappiamo già che la computazione è non terminante?

grazie in anticipo  yoh
Logged

Codice etico e di pratica professionale dello sviluppo software:
..
..
7. Colleghi. Gli sviluppatori software devono essere leali e di supporto nei confronti dei loro colleghi.
...
alex180788
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 422


« Reply #1 on: 17-11-2014, 19:23:50 »

Considerando quanto ho studiato finora sembrerebbe un refuso delle dispense,  ma magari mi sbaglio io e non ho capito bene... help testate
Logged

Codice etico e di pratica professionale dello sviluppo software:
..
..
7. Colleghi. Gli sviluppatori software devono essere leali e di supporto nei confronti dei loro colleghi.
...
Franco Barbanera
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 2.747



WWW
« Reply #2 on: 18-11-2014, 14:25:32 »

Considerando quanto ho studiato finora sembrerebbe un refuso delle dispense,  ma magari mi sbaglio io e non ho capito bene... help testate

Hai provato a far girare l'esempio sul compilatore PICT.
Compila e gira che e' un piacere.
Errore quindi non ce n'e'.

FB
Logged
Franco Barbanera
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 2.747



WWW
« Reply #3 on: 18-11-2014, 14:27:02 »

Ciao a tutti, nell'esempio del produttore-consumatore in PICT come mai il consumer avvia il processo "consumer!channel" se utilizzando il costrutto def sappiamo già che la computazione è non terminante?

Non capisco cosa c'entri il fatto di utilizzare il costrutto def con la non terminazione.

A questo punto ti invito a scrivere un post su come funziona il costrutto def.
cosi' vediamo se e dov'e' il problema di comprensione.

FB
Logged
alex180788
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 422


« Reply #4 on: 18-11-2014, 16:02:45 »

Def mi permette di definire un processo in ascolto che si replica effettuando un fork () ogni volta che riceve un valore (ben tipato) sul canale definito tramite il costruttto def. In questo modo se ci sono più processi "client" che inviano valori su questo canale esiste sempre una "copia" del processo server che ascolta... in questo senso il processo è non terminante
Logged

Codice etico e di pratica professionale dello sviluppo software:
..
..
7. Colleghi. Gli sviluppatori software devono essere leali e di supporto nei confronti dei loro colleghi.
...
Franco Barbanera
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 2.747



WWW
« Reply #5 on: 18-11-2014, 16:12:19 »

Def mi permette di definire un processo in ascolto che si replica effettuando un fork () ogni volta che riceve un valore (ben tipato) sul canale definito tramite il costruttto def. In questo modo se ci sono più processi "client" che inviano valori su questo canale esiste sempre una "copia" del processo server che ascolta... in questo senso il processo è non terminante

Si, pero' e' come se il processo def rimanga bloccato fino all'invio successivo.

Inoltre la "copia" viene creata e mandata in esecuzione dall'invio del valore sul canale.
Se nessuno invia niente, il processo def non fa nulla.

Un caro saluto
FB
Logged
alex180788
Apprendista Forumista
**
Offline Offline

Gender: Male
Posts: 422


« Reply #6 on: 18-11-2014, 18:29:31 »

ho ancora qualche dubbio.... quando abbiamo visto il funzionamento del def abbiamo usato questo esempio

def hailer [] = print!"hail!"

ed abbiamo detto che dopo questa dichiarazione:
1) il nome di canale "hailer" è noto a tutte le clausole seguenti
2) posso eseguire un numero indefinito di volte il seguente codice ed avrò sempre una copia del processo associato ad hailer che mi risponde

run hailer![]

vediamo se ho capito:
la differenza tra hailer e consumer (entrambi definiti con def) è che il "reale consumatore" è il sottoprocesso

channel?i = (print!i | consumer!channel)

che attende un valore i da "consumare" sul canale channel... questo sottoprocesso deve essere riavviato ogni volta inviando il valore channel nel canale consumer, quest'ultimo invece è sempre in ascolto in quanto definito con "def".

Quindi la definizione di consumer crea un processo non terminante in attesa di un nome di canale. Ogni volta che ne riceve uno avvia un processo in ascolto (questo invece termina una volta che riceve il valore atteso) che stampa il valore ricevuto e viene riavviato inviando LO STESSO nome di canale channel attraverso il canale consumer.

spero di non aver detto troppe castronerie  pray
Logged

Codice etico e di pratica professionale dello sviluppo software:
..
..
7. Colleghi. Gli sviluppatori software devono essere leali e di supporto nei confronti dei loro colleghi.
...
Franco Barbanera
Moderator
Forumista Eroico
*****
Offline Offline

Posts: 2.747



WWW
« Reply #7 on: 20-11-2014, 09:25:29 »

Giusto.

FB
Logged
Pages: [1]   Go Up
Print
Jump to: