Gambas-it

Gambas3 => Domande tecniche => Topic aperto da: vuott - 25 Agosto 2012, 01:00:57

Titolo: Aggiunto componente gb.task
Inserito da: vuott - 25 Agosto 2012, 01:00:57
https://lists.gambas-basic.org/pipermail/user/2012-August/040709.html
Titolo: Re: Aggiunto componente gb.task
Inserito da: md9327 - 27 Agosto 2012, 10:43:57
FINALMENTE!!!! FICHISSIMO se và in funzione...
Titolo: Re: Aggiunto componente gb.task
Inserito da: md9327 - 29 Agosto 2012, 10:27:25
Cioè è incluso nell'interprete? Che vuol dire, che poi lo stacca e ne fà un modulo a parte?

Comunque, come descrizione iniziale và bene, solo che non ho ben capito se la funzione della Main (statica poi? boh...) è necessaria, oppure si può controllare il task da qualsiasi parte del nostro programma, ad esempio la Application stessa...

Staremo a vedere, ad ogni modo lascerei un pò di tempo per lo sviluppo, tenendo presente che il multi-tasking è un articolo un pò delicato...
Titolo: Re: Aggiunto componente gb.task
Inserito da: vuott - 29 Agosto 2012, 11:23:51
.... il multi-tasking è un articolo un pò delicato...
Se il multi-tasking è multiprocessualità, o processualità concorrente di più programmi, quale differenza secondo te comporterebbe quella nuova funzionalità del gb.task alla già esistente possibilità  in precedenza di far funzionare comunque contemporaneamente più programmi Gambas ?
Titolo: Re: Aggiunto componente gb.task
Inserito da: md9327 - 29 Agosto 2012, 12:40:22
Caro vuott, i due concetti sono completamente diversi...

Credo sia il caso che ti vada a leggere qualcosina in merito...  ;D

A tutt'oggi, gambas non è multitasking, quindi gestisce le cose in modalità seriale (tanto per semplificare il discorso...).
Il fatto di poter, internamente ad un'applicazione, gestire più processi contemporanei, porterebbe gambas a livello di altri linguaggi evoluti. E' sottinteso che, per applicazioni normali, la cosa potrebbe essere anche ininfuente, ma questo è solo perchè non si ha conoscenza del problema.

Tanto per fare un esempio banale quanto stupido...
Pensa ad un'applicazione che permette di processare flussi di dati (es. file csv), di diversa natura e diversa provenienza, il tutto gestito da task paralleli a se stanti. Ogni task gestisce un processo di elaborazione di un flusso. Un task viene attivato all'arrivo di un flusso, senza attendere che il precedente abbia terminato. Ogni task apre e chiude il processo, ritornando l'esito al manager principale. Il manager non fà altro che attivare task, e ricevere i suoi eventi/esiti, che avvengono in modo parallelo e asincrono.

Ho fatto un esempio molto banale, ma può darti un'idea delle potenzialità di una cosa del genere. E' ovvio che questo include una certa padronanza del linguaggio e delle logiche, che in questo caso dentano un pò più complesse (vedi semafori, incroci, e via dicendo)...  :D
Titolo: Re: Aggiunto componente gb.task
Inserito da: vuott - 29 Agosto 2012, 16:26:14
Caro vuott, i due concetti sono completamente diversi...

A tutt'oggi, gambas non è multitasking, quindi gestisce le cose in modalità seriale (tanto per semplificare il discorso...).
Il fatto di poter, internamente ad un'applicazione, gestire più processi contemporanei, ...

...cioè, se non ho compreso male, nella stessa applicazione Gambas ora si avrebbe la capacità di svolgere due o più processi, ossia più codici, in modo parallelo ?
Titolo: Re: Aggiunto componente gb.task
Inserito da: Picavbg - 29 Agosto 2012, 19:39:53
Novità molto ineterssante, Ho letto qualche cenno sull'argomento qui (http://translate.google.it/translate?hl=it&sl=en&u=http://comments.gmane.org/gmane.comp.lang.gambas.user/20537&prev=/search%3Fq%3Dgb.task%2Bper%2Bgambas%26hl%3Dit%26client%3Dfirefox-a%26hs%3Dl67%26rls%3Dorg.mozilla:it:unofficial%26prmd%3Dimvnse&sa=X&ei=GlM-ULDHMM7MsgbdkoHICg&ved=0CC8Q7gEwAQ), ma si parla di eseguire un processo in background senza alcuna possibilità di passare o ricevere dati. Alla fine si ottiene un effetto di processi paralleli, ma in realtà sono gestiti dal processore sempre in modo sequenziale, attraverso il criterio di polling rotativo fra i dispositivi di input-output presenti nella tabella di interfaccia logica.
Non ho ancora capito se un pc dotato di multiprocessore possa comportarsi diversamente. Forse però no, perchè l'impiego dei pluriprocessori è quello di aumentare la frequenza di clock, per cui tutti i processi avviati possono esere eseguiti più velocemente, ma perchè il polling è eseguito più velocemente. Allora quelli che accorciano sono i tempi morti di attesa fra due richieste di polling successive sulla stessa unità periferica.
Ciao.
Titolo: Re: Aggiunto componente gb.task
Inserito da: md9327 - 30 Agosto 2012, 10:49:00
Per vuott:
sì, il concetto mediamente è quello

Per picavbg:
il concetto del multitasking è vero solo se la libreria utilizza realmente il multitask del sistema operativo e dei processori. Il fatto che due o più processi girino parallelamente e indipendentemente uno dall'altro fà parte della logica multitasking. E' sottinteso che poi i programmi devono tenerne conto.
A parte questo, posso anche essere d'accordo con te sulla effettiva attività eseguita con il multitask, ma è anche vero che ora i nodi elaborativi sono più di uno (es. un dual-core) che, se sfruttati secondo questa logica, permettono di avere un parallelismo vero e proprio.
Linux è un sistema operativo multitasking, per cui, se si utilizzano le funzioni idonee, un programma può attivare la potenza di questa logica.
Titolo: Re: Aggiunto componente gb.task
Inserito da: Picavbg - 30 Agosto 2012, 13:38:00
è anche vero che ora i nodi elaborativi sono più di uno (es. un dual-core) che, se sfruttati secondo questa logica, permettono di avere un parallelismo vero e proprio.
Anch'io pensavo ad un hardware con due cuori pulsanti parallelamentee quindi in grado di svolgere operazioni in contemporanea, ma ho voluto accertarmi su quanto la mia logica mi suggeriva. Ho trovato qualcosa sul dual core che però si riferiva esclusivamente ad una frequenza ravvicinata di clock e nient'altro. Devo dedurre che ho cercato male o di avere concluso la ricerca in modo precipitoso.

Citazione da: md9327
è anche vero che ora i nodi elaborativi sono più di uno (es. un dual-core) che, se sfruttati secondo questa logica, permettono di avere un parallelismo vero e proprio.
Linux è un sistema operativo multitasking, per cui, se si utilizzano le funzioni idonee, un programma può attivare la potenza di questa logica.
Per sfruttare appieno la potenza di cui parli un tale programma applicativo deve passare necessariamente una certo parametro al kernel, oppure è il codice di basso livello del linguaggio di programmazione utilizzato ad occuparsi di fornire l'informazione occorrente al kernel? Mi spiego meglio: un programma sorgente, sottoposto al processo di compilazione produce il così detto programma oggetto che, insieme al codice presente nel software del linguaggio di programmazione si trasforma in un eseguibile fatto a misura dell'hardware su cui girerà. Allora, non avendo mai approfondito gli aspetti legati allo sfruttamento dell'hardware, non ho percezione dell'eventuale intervento da parte del programmatore applicativo, relativamente all'utilizzo o meno della potenza dual core di un pc.
 :ciao:
Titolo: Re: Aggiunto componente gb.task
Inserito da: md9327 - 30 Agosto 2012, 14:37:04
Approfondire questo discorso credo sia fuori luogo qui.

Ogni applicazione si appoggia su uno strato base che è il sistema operativo, il quale si interfaccia con l'hardware attraverso moduli appositi scritti ovviamente a basso livello. Per dirla tutta, sotto del sistema operativo c'è il bios della macchina, ma qui il discorso si complica uleriormente. Basta dire che il bios si occupa di direzionare opportunamente l'I/O, dipendentemente dalla struttura specifica dell'hardware (non sono tutti uguali i computer...).

Detto questo, l'applicazione, utilizzando opportunamente le funzioni messe a disposizione dal sistema operativo, può usufruirne e sfruttarle se necessario.
E' sottinteso che le caratteristiche di multitasking devono essere fornite realmente dal sistema operativo, e non solo simulate a livello software.
E' quindi da tener presente una condizione di tasking simulato, e questo ovviamente riporta al sistema di serializzazione che hai indicato nei precedenti post.
Titolo: Re: Aggiunto componente gb.task
Inserito da: milio - 22 Ottobre 2012, 11:16:13
Qualcuno di voi ha utilizzato per qualche test il componente?

Io non ci cavo un ragno dal buco! :(
Titolo: Re: Aggiunto componente gb.task
Inserito da: md9327 - 22 Ottobre 2012, 11:48:46
Perchè, lo vuoi usare per costruire ragnatele?  ;D
Titolo: Re: Aggiunto componente gb.task
Inserito da: vuott - 22 Ottobre 2012, 11:51:42
Qualcuno di voi ha utilizzato per qualche test il componente?

Io non ci cavo un ragno dal buco! :(


Ci vorrebbe qualcuno che chiedesse nalla Mailing List Internazionale... magari qualche utente lì avrà già usato questo componente.
Titolo: Re: Aggiunto componente gb.task
Inserito da: milio - 22 Ottobre 2012, 11:54:13
Ci vorrebbe qualcuno che chiedesse nalla Mailing List Internazionale... magari qualche utente lì avrà già usato questo componente.

Ok, grazie vuott... come sempre gentilissimo e disponibile a sacrificarti per la comunità....  :rotfl:
Titolo: Re: Aggiunto componente gb.task
Inserito da: vuott - 22 Ottobre 2012, 12:04:52
Ok, grazie vuott... come sempre gentilissimo e disponibile a sacrificarti per la comunità....  :rotfl:
sacrificarti ? Io no capire questa parola ! Io no parlo italiano. No capire.
Titolo: Re: Aggiunto componente gb.task
Inserito da: vuott - 22 Ottobre 2012, 12:16:41
Un test allegato in un messaggio nella MLI lo avevo conservato nella mia casella di posta elettronica. Lo allego qua. L'autore che lo ha gentilmente allegato è tale Olivier Cruilles.
Titolo: Re: Aggiunto componente gb.task
Inserito da: milio - 22 Ottobre 2012, 13:10:17
sacrificarti ? Io no capire questa parola ! Io no parlo italiano. No capire.

Tu capire benissimo, tu essere successo qualcosa... ma cosa?  ???

Grazie per l'esempio, adesso lo guardo
Titolo: Re: Aggiunto componente gb.task
Inserito da: milio - 22 Ottobre 2012, 13:18:25
Bho.... non riesco ancora a capire come possa essere utilizzato....

l'esempio che hai postato non mi sembra finito, non fa assolutamente nulla, o perlomeno io non vedo nulla...
Titolo: Re: Aggiunto componente gb.task
Inserito da: md9327 - 22 Ottobre 2012, 13:53:19
E sei peggio di san tommaso...  :D

Fidati!!!  ;D
Titolo: Re: Aggiunto componente gb.task
Inserito da: vuott - 22 Ottobre 2012, 15:38:04
Bho.... non riesco ancora a capire come possa essere utilizzato....

l'esempio che hai postato non mi sembra finito, non fa assolutamente nulla, o perlomeno io non vedo nulla...

...ma un asino come me, dove pensavi che t'avrebbe potuto portare ? ;D

...magari quel programma è... a scoppio ritardato ! :rotfl:
Titolo: Re: Aggiunto componente gb.task
Inserito da: vuott - 24 Ottobre 2012, 09:53:52
Ok, grazie vuott... come sempre gentilissimo e disponibile a sacrificarti per la comunità....
Ho posto la richiesta nella MLI, e mi è stato trasmesso dall'utente Ivan Kern il programmino che qui allego.
Titolo: Re: Aggiunto componente gb.task
Inserito da: milio - 24 Ottobre 2012, 19:29:05
E' come pensavo... bisogna crearli un loop all'interno del main.... l'unica cosa che non riesco a comprendere e' come passargli dei dati quando il task e' in esecuzione... per ora sono riuscito solo a settare delle variabili prima che il task venga eseguito
Titolo: Re: Aggiunto componente gb.task
Inserito da: vuott - 24 Ottobre 2012, 22:48:16
E' come pensavo... bisogna crearli un loop all'interno del main.... l'unica cosa che non riesco a comprendere e' come passargli dei dati quando il task e' in esecuzione... per ora sono riuscito solo a settare delle variabili prima che il task venga eseguito

Ho posto  >:( la questione all'autore dell'esempio. Vediamo che ci dice.
Titolo: Re: Aggiunto componente gb.task
Inserito da: vuott - 25 Ottobre 2012, 10:17:54
Ho posto  >:( la questione all'autore dell'esempio. Vediamo che ci dice.

Dunque, ho avuto la risposta da Ivan Kern, ma non dice più di tanto:
"Hello Vuott,
I have tested the component only, but I do not use it. I'm afraid I can not help you further.
"

Poi rinvia a quanto esposto da Minisini e riportato nel primo messaggio iniziale di questa discussione.