Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. 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: 391
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
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 ?

PM Quote
Avatar
fosforo (Normal User)
Expert


Messaggi: 391
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

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
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.

PM Quote
Avatar
fosforo (Normal User)
Expert


Messaggi: 391
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

PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
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.

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.

PM Quote
Avatar
fosforo (Normal User)
Expert


Messaggi: 391
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 #

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?

PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo