Archivio | ottobre, 2011

Il mio lavoro

7 Ott

A volte mi capita di confortarmi con amici e conoscenti riguardo al lavoro e constatare quanto la mia vita sia condizionata dalla mia attività lavorativa. A volte mi domando se questo tempo dedicato al lavoro sia giusto o se forse sto esagerando perdendo di vista cose più importanti.

Proprio in questi giorni purtroppo uno dei più grandi imprenditori dell’informatica contemporanea,Steve Jobs, ci ha lasciato. La sua dedizione al lavoro era cosa risaputa e mi piace ricordarlo con una frase del suo celebre discorso tenuto presso l’unversita di stanford

You’ve got to find what you love. And that is as true for your work as it is for your lovers. Your work is going to fill a large part of your life, and the only way to be truly satisfied is to do what you believe is great work. And the only way to do great work is to love what you do. If you haven’t found it yet, keep looking. Don’t settle. As with all matters of the heart, you’ll know when you find it. And, like any great relationship, it just gets better and better as the years roll on. So keep looking until you find it. Don’t settle.

e concludere questo post con la sua frase di commiato

Stay Hungry. Stay Foolish.

Annunci

Synchronization

6 Ott

La programmazione multi-threading dopo il classico esempio “Hello world” sembra la soluzione ottimale per molti dei problemi quotidiani dei nostri software ad un costo tutto sommato accettabile: dobbiamo isolare il codice da eseguire in parallelo costruendo un po’ di delegate e ricordarci di usare i lock opportuni se il codice “parallelizzato” accede a variabili condivise.

Purtroppo però quando si ricorre all’utilizzo della programmazione concorrente i problemi non si fermano qui. Un’altro importante capitolo, e non ceto semplice, è quello relativo alla sincronizzazione dei diversi thread che operano in concorrenza.

Lo scenario più semplice lo troviamo quando abbiamo 2 thread: il primo lancia il secondo e resta in attesa che il secondo termini il suo lavoro. Ma spesso le cose non sono così semplici. Quando le operazioni da eseguire in contemporanea sono molte la faccenda si può complicare parecchio. Quando poi l’esecuzione di una operazione dipende dal termine di altre operazioni concorrenti che al loro volta sono il risultato di altre operazioni asincrone ed in mezzo a tutto questo si inseriscono anche varibili condivise le cose possono facilmente sfuggire di mano.

In questi casi l’approccio migliore è evitare l’improvvisazione: esistono diversi pattern per affrontare in modo corretto questi scenari. La prima cosa da fare è conoscerli e capire come sono implementati nei linguaggi di programmazione che usiamo quotidianamente.