2 messaggi dal 22 settembre 2011
Salve,

avevo la necessità di chiarire e distinguere nettamente nella mia mente i due concetti : multi-threading e programmazione async,
in particolare mi sono sorti questi dubbi ai quali ho cercato di dare risposte facendo ricerche varie :

1. In che contesto di programmazione fare uso dell'uno e dell'altro modello, per esempio quando devo svolgere operazioni lunghe in durata e/o impegnative in CPU che posso separare dal flusso di controllo principale ?
2. Essendo simili, quando e perchè fare ricorso ad un modello o ad un altro : per esempio se ho più processori è meglio usare il multi-threading, o se l'operazione non è troppo impegnativa è meglio usare la programmazione async per evitare latenze di context-switching

magari, sulla base delle risposte approfondiremo ulteriormente,
grazie
497 messaggi dal 08 febbraio 2009
Ciao

Ti riporto un aneddoto che mi diedero ad un corso anni fa, sperando sia ancora valido.

La programmazione asincrona viene comoda quando si parla di lavori che può fare una stessa persona (thread) passando dall'uno all'altro quando c'è una pausa.
Come esempio puoi prendere un cuoco che prepari la pasta al pomodoro.
- Mette su l'acqua
- Mentre il fuoco fa bollire l'acqua e il cuoco è libero, sfrutta quel tempo per pulire il basilico
- Quando l'acqua bolle, versa la pasta
- Mentre la pasta cuoce, scalda il passato di pomodoro
- Quando la pasta è cotta e il pomodoro è caldo, la condisce

Come vedi, sono tanti step dello stesso lavoro che possono essere eseguiti da una persona sola mentre il passaggio precedente è "in carico" a qualcun altro (nel nostro caso il fuoco).

Questo è lo stesso concetto di async/await: quando il task che stai eseguendo libera il processore (es: la palla ce l'ha il disco per memorizzare i dati), il processore si mette a fare qualcos'altro, come per esempio aggiornare l'interfaccia grafica.


Il multi-threading, invece, è quando si devono fare in concomitanza più lavori. Per esempio per sistemare un giardino si deve tagliare l'erba e potare le piante. In questo caso non è che "si passa la palla" a qualcun altro. O si taglia l'erba, oppure si potano le piante. Sono due lavori indipendenti che vengono fatte da due persone diverse.



A me è stato spiegato così, ha il suo senso e fino ad oggi ho sempre assecondato questo ragionamento.
Spero di esserti stato d'aiuto
2 messaggi dal 22 settembre 2011
Credo di avere colto il senso :

Programmazione asincrona, quando abbiamo un complesso Task che posso spezzettare in sub-task che posso eseguire, in parte,
in concorrenza con altri sub-task. Esempio : gli step di una ricetta.

Programmazione Multi-Threading, quando posso eseguire dei complessi Task in maniera quasi-indipendente l'uno dall'altro, eccezion fatta per l'accesso sincronizzato alle shared resources. Esempio : una ricetta e un lavoro di giardinaggio.

Grazie, cercherò di seguire questa filosofia

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.