Questo sito utilizza cookies, anche di terze parti, per mostrare pubblicitÓ e servizi in linea con il tuo account. Leggi l'informativa sui cookies.
Username: Password: oppure
C# / VB.NET - [vb.net]Gestire Multithreading
Forum - C# / VB.NET - [vb.net]Gestire Multithreading

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
fosforo (Normal User)
Expert


Messaggi: 293
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 21:17
Mercoledý, 07/10/2009
Ciao
Ho un Dual Xeon Dual Core.
Ho notato che molti programmi commerciali utilizzano solo 1 core
mentre gli altri rimangono inutilizzati.
Vorrei capire se esiste la possibilitÓ di monitorare l'utilizzo dei vari core per poi utilizzarne i meno occupati.


Grazie

Ultima modifica effettuata da fosforo il 07/10/2009 alle 21:19


Scusate per la figuraccia.
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 22:19
Mercoledý, 07/10/2009
Non ho capito ... vuoi che i programmi scritti da te possano utilizzare piu' core ?

Oppure vuoi che i "programmi commerciali" di cui parli utilizzino tutti i core ?


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
fosforo (Normal User)
Expert


Messaggi: 293
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 9:44
Giovedý, 08/10/2009
Scusami ma visto l'ora del 3d era meglio che andavo a casa a dormire.

Dunque.....
Ho notato che certi programmi commerciali usano 1 solo core, (Es. Quick Time).
Quando lo lancio vedo tramite il Task Manager di XP che 1 core lavora e gli altri sono praticamente fermi.
Ora devo scrivere un programmino e vorrei capire se c'Ŕ la possibilitÓ di controllare l'utilizzo dei vari core e indirizzare il mio programma nel core meno utilizzato.

Grazie


Scusate per la figuraccia.
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1787
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 10:23
Giovedý, 08/10/2009
Risposta breve: non puoi, ma...


Risposta lunga:
Puoi programmare un software separandone le funzioni (Input, Rendering, Processing, ecc...) su thread separati, ma sarÓ il sistema operativo (precisamente lo "Scheduler" dello stesso) a decidere quali core occupare. Hai comunque una discreta garanzia che il Sistema Operativo sia sufficientemente intelligente da gestire al meglio l'allocazione dei core. Se fossi tu a decidere quali core utilizzare dovresti costantemente monitorarne il carico e prevedere delle strane e complesse procedure per migrare da un core all'altro nel momento in cui i carichi subiscano delle modifiche. Lasciandosi, invece, gestire dal SO hai tutto questo in modo trasparente (compresa la migrazione tra i core) e devi "solo" occuparti di creare e sincronizzare i vari thread (che giÓ non Ŕ una cosa semplice per un esperto, figuriamoci per un principiante).

Questo vale per tutti i programmi, indipendentemente dal linguaggio utilizzato.


Software Failure: Guru Meditation
Forum su Informatica, Elettronica, Robotica e Tecnologia: http://www.nonsoloamiga.com
PM Quote
Avatar
fosforo (Normal User)
Expert


Messaggi: 293
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 10:56
Giovedý, 08/10/2009
Grazie T

Per capirci di pi¨ ho creato un piccolo programmino che lancia + QuickTime alla volta
e visualizza vari filmati.
Guardando il Task Manager scopro che QT cade sempre nello stesso core.
Ecco xkŔ mi chiedevo se riuscivo a lanciare eventuali programmi decidendo io su quale Core appoggiarli.

Ne aprofitto visto che mi hai parlato di thread.
Ecco come sto scrivendo per lanciare una semplice copia di file su + thread:

' lancio Sub x copia TXT
Dim T1 As New Threading.Thread(AddressOf CopyTXT)
        T1.Start(New String() {NomeFile1,Nome})

Private Sub CopyTXT(ByVal parametri() As String)
         System.IO.File.Copy .... etc etc


' lancio Sub x copia TXT
Dim T2 As New Threading.Thread(AddressOf CopyDOC)
        T1.Start(New String() {NomeFile1,Nome})

Private Sub CopyDOC(ByVal parametri() As String)
         System.IO.File.Copy .... etc etc

Chiaramente codice sintetizzato.
Pensi che sia corretto??

Grazie e scusa la mia impreparazione


Scusate per la figuraccia.
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1787
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 11:17
Giovedý, 08/10/2009
Ciao, non posso esserti molto utile sul codice, perchŔ non conosco VB.Net
Ma da quello che riesco ad interpretare, il procedimento mi sembra corretto. In generale credo che sia meglio comunque chiedere ad un esperto di VB.Net, magari ci sono delle cose nella libreria del Threading che puoi sfruttare.

Io posso aiutarti da un punto di vista teorico, sulla gestione "generale" del threading, oppure sul codice in C o C++ per implementare il multithreading.


Software Failure: Guru Meditation
Forum su Informatica, Elettronica, Robotica e Tecnologia: http://www.nonsoloamiga.com
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 14:00
Giovedý, 08/10/2009
In realta' puoi "proporre" al sistema operativo l'uso di un core specifico per il tuo nuovo thread o processo (tramite la ProcessorAffinity della ProcessThread) o con la API SetThreadAffinityMask.

E' comunque una "proposta" nel senso che il sistema puo' comunque scegliere altrimenti.


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Avatar
fosforo (Normal User)
Expert


Messaggi: 293
Iscritto: 06/04/2009

Segnala al moderatore
Postato alle 14:04
Giovedý, 08/10/2009
Ok capito
Sto vedendo che in Vista c'Ŕ un comando apposito giÓ sotto DOS.

/affinity #


Scusate per la figuraccia.
PM Quote
Avatar
theprogrammer (Normal User)
Guru^2


Messaggi: 2509
Iscritto: 28/01/2009

Segnala al moderatore
Postato alle 14:10
Giovedý, 08/10/2009
Di che parli ? Che c'entra il DOS con la tua applicazione .NET?


- Se le mie risposte non vi soddisfano, ignoratele, altrimenti un "grazie" e' molto gradito ...

"Dai un pesce (programma) a un uomo e lo nutrirai per un giorno. Insegnagli a pescare (programmare) e lo nutrirai per tutta la vita." (niente pappa pronta)
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo