2009-12-29 6 views
0

J'ai un code multi-threading en cours d'exécution sur mon application asp.net comme suit:Multi-Threading Temps de démarrage

... 
List<Thread> workers = new List<Thread>(); 
foreach (Airline airline in this._criteria.Airlines) 
{ 
    Task mytask = new Task(); 
    Thread t = new Thread(new ThreadStart(mytask.Execute)); 
    workers.Add(t); 
    t.Start(); 
} 

//block all until finish 
foreach (var t in workers) 
{ 
    t.Join(); 
} 

... 

Ce code est excellent travail sur l'un des serveurs (Windows2003, 32 bits) et une grande vitesse . Mais quand je l'ai déplacé vers le nouveau serveur, windows2008 64bit, j'ai constaté que toutes les tâches ne débutaient pas aussi.

Voici le temps de démarrage pour chaque tâche à la fois sur le serveur: - rqst = temps lorsque la tâche commence - Resp = temps lorsque la tâche fait

--------------- -------- serveur 2: 64bit windows 2008 ----------------- * vous verrez l'heure de début de chaque tâche (commencée le 01:12 : 55,233 et dernier a commencé le 01: 13: 11,773)

26230 2009-12-29 01: 13: 12,953 5812 Resp
26229 2009-12-29 01: 13: 11.773 5812 rqst

26228 2009-12-29 01: 13: 05,453 616 Resp
26220 2009-12-29 01: 13: 00,213 616 rqst

26227 2009-12-29 01: 13: 02,843 5792 Resp
26224 2009 01 -12 à 29: 13: 01,653 5792 rqst

26225 2009-12-29 01: 13: 01,873 4136 Resp
26221 2009-12-29 01: 13: 00,657 4136 rqst

26226 2009- 12-29 01: 13: 02.433 4932 Resp
26223 2009-12-29 01: 13: 01.150 4932 Rqst

26222 2009-12-29 01: 13: 00,910 5096 Resp
26219 29.12.2009 01: 12: 59,813 5096 rqst

26217 2009-12-29 01: 12: 56,703 3332 Resp
26216 2009-12-29 01: 12: 55,303 3332 rqst

26218 2009-12-29 01: 12: 56,703 3768 Resp
26215 2009-12-29 01: 12: 55,233 3768 rqst

- ----------------------- serveur1: Windows 2003 -----------------

26129 2009-12-29 01: 11: 44,107 5056 Resp
26126 29.12.2009 01: 11: 42,950 5056 rqst

26130 2009-12-29 01: 11: 44,107 7368 Resp
26127 2009-12-29 01: 11: 42,967 7368 rqst

26128 2009-12-29 01: 11: 44,090 5548 Resp
26125 2009-12-29 01: 11: 42,933 5548 rqst

26120 2009-12-29 01: 11: 42.887 8100 Resp
26117 2009-12-29 01: 11: 41.637 8100 Rqs t

26121 2009-12-29 01: 11: 42.887 7640 Resp
26116 2009-12-29 01:11:41.623 7640 rqst

26122 2009-12-29 01: 11: 42,887 7780 Resp
26119 29.12.2009 01: 11: 41,700 7780 rqst

26123 2009-12-29 01: 11: 42,887 1868 Resp
26115 2009-12-29 01: 11: 41,543 1868 rqst

26118 2009-12-29 01: 11: 41,670 5936 Resp
26124 2009-12-29 01: 11: 42,887 5936 rqst

Y a-t-il quelque chose qui ne va pas dans mon code ou qui concerne la différence? plates-formes? Merci

+0

L'architecture matérielle des deux machines est-elle la même? Si le second système (64 bits) est multicœur, cela pourrait être un facteur. – jfawcett

+0

Oh, et aussi, est le serveur 2008 R1 ou R2? R1 est ServerVista, tandis que R2 est ServerWin7. De grandes différences entre les deux. – jfawcett

+2

Pas une réponse à votre question mais une forte suggestion: Vous devriez vraiment envisager d'utiliser le framework async intégré à asp.net. Vous pouvez mettre en file d'attente plusieurs éléments sans que votre thread de demande ne bloque et n'attende. Vous aurez la vitesse ET une meilleure concomitance avec très peu de code supplémentaire à écrire. –

Répondre

1

Je pense que la taille de la pile pour les threads sur le x64 est supérieure à 1 Mo comme sur Windows 2003 x86. Essayez plutôt d'utiliser le pool de threads pour réduire le coût de création de nouveaux threads.

En outre, le nouveau IIS sur Windows 2008 pourrait (je ne suis pas sûr) étrangler à quelle vitesse les threads peuvent être générés.