2013-08-05 13 views
5

Esegue un'attività C# su un core?Un'attività C# viene eseguita su un core?

Ho un progetto in cui ho bisogno di decidere quanti compiti creare. Ho bisogno di crearne tanti, come può fare il computer. È il numero di processori, core o processori logici, sono confuso tra le tre opzioni.

+0

Come ho capito, un thread gestito non è nemmeno necessariamente eseguito sul proprio thread nativo. Quindi penso che la risposta alla tua domanda sia "nessuno dei due". – ken

+1

Un'attività funziona in modo molto simile a un thread per il quale viene eseguito il core (credo). Per rispondere alle tue domande dipende da cosa stanno facendo i tuoi compiti su quale risorsa stanno usando la maggior parte della CPU/IO/memoria/disco ...? – TheKingDave

+0

Un'attività può passare da un nucleo all'altro. Quello che dovresti veramente chiedere è "un compito funziona su più di un nucleo?". No. –

risposta

3

Un'attività viene eseguita su un thread. Il sistema operativo pianifica i thread sui core. I core sono un concetto logico e diverso dai chip fisici della CPU.

Creare attività Environment.ProcessorCount oppure utilizzare uno dei costrutti TPL di livello superiore come PLINQ o Parallel.

0

Se si utilizza la libreria di attività (PTL), non è necessario preoccuparsi di ciò. Potete leggere di più su di esso here. In breve:

Il TPL scala dinamicamente il grado di concorrenza per utilizzare in modo più efficiente tutti i processori disponibili. Inoltre, il TPL gestisce il partizionamento del lavoro ...

Abbiamo creato un wrapper Task come segue:

public static class PeriodicTaskFactory 
{ 
    public static Task Start(Action action, int intervalInMilliseconds = -1, int delayInMilliseconds = 0, int duration = -1, int maxIterations = -1, bool synchronous = false, CancellationToken cancelToken = null, TaskCreationOptions periodicTaskCreationOptions = TaskCreationOptions.None); 
} 

E poi noi lo chiamiamo in questo modo. In questo caso, l'unico lavoro che vogliamo eseguire è chiamare un singolo metodo ogni 1 minuti, con un ritardo di 1 secondo nella prima esecuzione.

 PeriodicTaskFactory.Start(() => 
     { 
      CdClMappingLogic.Invoke(); 
     }, 60000, 1000, -1, -1, true) 
+0

Puoi essere più specifico per favore? Sì, sto leggendo quel documento in realtà. – user2381422

+0

Fondamentalmente quello che sta salvando qui è che tu in TPL definisci il lavoro e lascia che il framework risolva quanti thread ... ecc. Per creare. Devi solo definire cosa deve fare ciascun thread. – TheKingDave

+0

@ user2381422 - Sì, come ha detto TheKingDave, è molto semplice da usare. Si definisce il lavoro che si desidera eseguire, lo si avvolge in un'attività e .NET FW decide il modo migliore per eseguire quel blocco di lavoro in base alle risorse della CPU e di altre risorse. –

Problemi correlati