Visualizzazione dei risultati da 1 a 4 su 4
  1. #1

    [GUIDA]Sviluppo di applicazioni multithread

    La seguente guida cerca di chiarire alcuni aspetti della programmazione in C e C++ che sono poco presenti nei manuali e su internet. Le informazioni si trovano quasi sempre in inglese e frammentate.

    Col vostro aiuto vorrei costruire questa guida che illustri passo per passo i vantaggi di una programmazione multithread spiegando i vari aspetti di questa tecnologia. Quindi inviatemi quante più mail siete in grado di mandarmi con consigli e nuove aggiunte!
    Autore: Daniele Guiducci - lordsaga640@alice.it

    La guida è gratuitamente scaricabile da internet, stampabile, ridistruibuibile modificata, tradotta, a condizione che rimanga gratuita (non ci si lucri sopra)!

    Multithread 0.1
    -----------------------------------------------------------

    Indice

    = Processori RISC e CISC
    Un processore è un componente hardware respondabile dell'interpretazione dei comandi in linguaggio macchina. L'interpretazione di questi comandi avviene in modo sequenziale, ossia il listato dei comandi viene interpreato uno di sequito all'altro.
    Il comandi che un processore può intepretare si dividono in due categorie RISC (Reduced Instruction Set Computer) e CISC (Complex instruction set computer). I processori RISC hanno insiemi di istruzioni molto semplici, di questa categoria fanno parte, ad esempio i PowerPC (cell della playstation3). I processori CISC intepretano istruzioni più complesse e sono i processori dei più comuni desktop e laptop.
    I set di istruzioni usate non pregiudicano le prestazioni di un processore, dipende per quale utilizzo è stato progettato!
    I vecchi processori potevano interpreate solo RISC ed eseguire solo un programma per volta, erano cioè monotasking!
    Un processore monotasking può eseguire un solo programma (non ci sono sistemi operativi!) e lavorare su tutta la memoria disponibile.



    = Multitasking
    In un sistema multitasking i programmi prendono i nome di processi (li chiameremo così ora).
    I processori continuando ad eseguire sempre le istruzioni in modo sequenziale, infatti l'uso del processore da parte del processo avviene per piccole quantità di tempo in modo da permettere a tutti i processi l'accesso al processore.
    Il processore può eseguire grandi quantità di calcoli al secondo, ed è per questo che nei moderni computer con una grafica user friendly "sembra" che tutti i programmi siano eseguiti contemporaneamente.



    = Processi e MV (Memoria Virtuale)
    Un processo è uno spazio all'interno della memoria di un computer, che contiene dati e istruzioni. Le istruzioni macchina del codice del processo usano indirizzi logici sulla base della propria memoria virtuale e non in base alla memoria fisica. L'MMU è una parte sul chip del processore che provvede a cambiare l'indirizzo virtuale in indirizzo fisico.
    L'indirizzo virtuale del primo byte della memoria virtuale è zero. Si usano indirizzi virtuali nel codice macchina, invece che fisici, perchè è impossibile per un processo sapere in che posizione della memoria fisica verrà allocato durante il caricamento in memoria.
    Il processo che genera indirizzi logici (indirizzi di memoria virtuale) non può assolutamente accedere alla memoria virtuale di altri processi. Sì può accedere alla MV di altri processi solo con le aree di memoria condivisa. La memoria condivisa è un area della MV all'interno del processo che è inclusa in più processi.
    Wikipedia contiene un articolo sulla Memoria Virtuale! http://it.wikipedia.org/wiki/Memoria_virtuale




    = Multithread
    Il multithreading può essere emulato oppure supportato direttamente nei sistemi operativi nuovi.
    Ogni processo contiene sempre codice e dati con la differenza sostanziale che ci possono essere più flussi di codice in esecuzione sul processo stesso.
    In modo molto informale, due thread in esecuzione di un processo, possono essere visti come due processi differenti ma che condividono la stessa memoria virtuale, quindi condividono tutti le variabili globali e non solo!
    Come abbiamo precedentemente detto un processo può vedere solo ed esclusivamente la propria memoria virtuale che è un sottoinsieme della memoria principale del computer. I processi possono comunicare tra di loro tramite memoria condivisa (la base dell'IPC).
    I thread di un processo non hanno bisogno di comunicare tra di loro perchè condividono tra di loro tutte le risorse del processo senza alcun limite.




    = Multithreading su multiprocessore (migliorare le prestazioni di una applicazione)
    Su un sistema multiprocessore i thread di un solito processo possono essere eseguiti parallelamente su più processori. E' possibile così sfruttare in modo intelligente tutti i processori disponibili.

    Vi siete mai chiesti perchè i processori di oggi si sono fermati alla soglia dei 4GHz?
    Semplice, siamo quasi arrivati ai limiti fisici della materia e più di così non riusciamo a fare con gli attuali materiali e schemi di costruzione.
    La miniaturizzazione permette di inserire sempre più transistor all'interno dei un singolo die ma non aumentiamo molto le prestazioni! Questa è il per ora il tallone di achille che i costruttori dovranno affrontare.
    Proprio i costruttori hanno cercato di risolvere in parte questo problema, invece che di aumentare la velocità dei singoli processori, di aumentarne il numero.
    La velocità di esecuzione di un singolo thread è dunque sempre la stessa, ma in un sistema con più processori è possibile eseguire più thread contemporaneamente quindi aumenta la potenza di calcolo.
    I programmatori dovrebbero prendere atto del fatto che gli utenti usano sistemi con più core e che è ora di sfruttare tutte queste risorse inutilizzate.

    Un esempio pratico di un applicazione che prima non sfruttava di multithread è WinRAR. Alcuni anni questa applicazione sfruttava solo un singolo processore per comprimere un archivio. Quindi se veniva eseguito in un sistema con due processore, le risorse di calcolo venivano impegnate solo per il 50%! Adesso winrar comprime gli archivi sfruttando totalmente le risorse. Ho un Quad core e le prestazioni, a parità di clock del processore, sono nettamente superiori!

    = Multithread per una applicazione
    Può thread in un processo non devono servire per forza per migliorare le prestazioni della applicazione, ma in genere sono usate per il solo scoppo di facilitare la realizzazione dell'applicazione stessa..



    Coming soon...con la documentazione sulle chiamate di sistema per realizzare il multithread in C e C++
    ...

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Questo e' un forum tecnico sui problemi di programmazione ... questo tipo di messaggi non sono attinenti ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Originariamente inviato da oregon
    Questo e' un forum tecnico sui problemi di programmazione ... questo tipo di messaggi non sono attinenti ...
    Volevo cambiare il titolo in [PILLOLA] ma a quanto pare non me lo permette il forum per via del limite di tempo di 60 minuti (??).
    In cosa non è attinente?
    ...

  4. #4
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480
    Non e' una problematica tecnica relativa alla programmazione per cui postare in questo forum.

    Se voleva essere una PILLOLA (discutibile, in quanto da rivedere sia nell'ortografia sia nei contenuti ...) allora dovevi seguire quanto scritto nelle regole per proporre una pillola e NON POSTARLA insieme ai quesiti tecnici ... Se leggi nelle regole, infatti, troverai ...

    ... Se volete proporre una vostra pillola da pubblicare all'interno del forum, contattate preventivamente un moderatore per assicurarvi che l'argomento non sia già stato trattato altrove nel forum e per segnalare l'intenzione di inserire questo tipo di risorsa, in modo da poter vagliare la sua effettiva validità e completezza e poterne inserire poi un collegamento all'interno di questo thread. Lo stesso vale per la segnalazione di discussioni interessanti e siti esterni.

    Per contattare un moderatore, fate uso dei messaggi privati.
    No MP tecnici (non rispondo nemmeno!), usa il forum.

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.