Il primo computer fu meccanico, la prima programmatrice ... fu una donna!


Mi ha un po sorpreso ricordare che il primo computer fu meccanico e non elettrico.

Blaise Pascal a 19 anni inventò e costruì una macchina meccanica che calcolava somme e sottrazioni. Era il 1642.
In suo onore fu dato il suo nome al linguaggio di programmazione.

Qualche anno più tardi W.B. Leibniz inventò e costruì una macchina meccanica che faceva anche moltiplicazioni e divisioni . Oltre a inventare il calcolo binario e preparae basi utili alla realizzazione della macchina di Touring.

Solo 150 anni più tardi Charles Babbage costrui un macchina in grado di risolvere equazioni polinomiali e progettò una macchina meccanica programmabile dotata di memoria e lettore di schede perforate. Nel 1991 il suo progetto è stato totalmente realizzato a conferma della sua intuizione.  Tra le altre cose è stato il padre della ricerca operativa e prefigurò il concetto di intelligenza artificiale.

Notizie dei primi calcolatori meccanici si ritrovano anche ne L'accadeimia dei sogni di Wiliam Gibson , il Curta , calcolatore meccanico usato nei Rally sino agli anni '80.

La prima programmatrice fu una donna ed era il 1833 - ce ne fossero di più oggi le sw-house sarebbero luoghi più allegri :D - Ada Augusta Lovelace programmò la analytical engine di Baddage . Anche in suo onore il suo nome fu dato al linguaggio di programmazione.   E Rosalba Fiore questo lo sa bene :)

 

 

Progettazione di applicazioni multi-threading 3°

 

          La successiva scelta di progettazione da fare è su     la metafora in base alla quale impostare il modello di programmazione      per la gestione della concorrenza.

Sono due le metafore più comuni, la prima è          il modello a sincronizzazione           in cui due (e più) istanze su due differenti thread si scambiano messaggi per coordinarsi nel fare i compiti/operazioni/calcoli necessari all'applicazione. Mentre l'altra è          il modello a competizione          in cui due (e più) istanze su due differenti thread competono per usare in modo esclusivo un'istanza che è in esecuzione su entrambi i thread (*).




  • Il modello a sincronizzazione

    è detto anche   
    produttore-consumatore   perchè come in una catena di montaggio una istanza in un thread "consuma" i risultati "prodotti" dall'istanza in esecuzione sull'altro thread.
    Un esempio è un programma di masterizzazione in cui una istanza su di un thread legge i dati dal lettore CD e una su un altro thread li salva sul masterizzatore. Un'istanza nel thread di "scrittura" manda un messaggio di send e resta in attesa di avere dati da salvare, l'istanza nel thread di lettura risponde con un buffer di dati e poi prosegue a leggere.





  • Il modello a competizione

    è detto anche   
    a variabili condivise   su cui istanze che girano su thread differenti ci  leggono e scrivono e vogliono farlo in modo esclusivo per leggere in modo consitente lo stato delle variabili e modificarlo in modo consistente. 
    Ad esempio una applicazione Web di registrazione ordini che serve diversi client su thread diversi ogniuno dei quali accede in modo esclusivo ai dati di magazzino per acaparrarsi in modo esclusivo la disponibilità di un articolo.




Il modello a sincronizzazione      è adatto ad applicazioni in cui ...    è naturale modellare il compito che l'applicazione svolge con una combinazione di coppie produttore-consumatore. Una modellazione a work-flow.
Tipicamente il numero di thread è fisso e il compito di ogni thread è noto a priori.

il modello a competizione         è adatto ad applicazioni in cui ...       è naturale modellare le risorse/variabili/istanze che saranno accessibili e condivise tra più thread.
Tipicamente le istanze condivise tra thread diversi sono fisse e note a priori e spesso lo è anche il compito dei thread mentre il loro numero può cambiare dinamicamente a run-time (ad esempio a seconda del numero di client serviti).

 

(*) Queste metafore interessano per il disegno della applicazione. Il fatto che ci sono primitive di programmazione della concorrenza che adottano queste metafore (lo scambio di messaggi send/receive con rendezvous e le sezioi critiche) confonde un pò.

Tags :  Progettazione Software