2010-07-27 3 views
2

Je viens de lancer le profileur de threads Visual Studio 2010 par rapport à mon code Azure et j'ai remarqué que je reçois beaucoup de conflits. Mon code est bloqué plus souvent qu'il ne fonctionne!Qu'est-ce qui provoque des conflits de threads avec mon code Azure Queue?

Mon travail ne possède aucune logique de threads personnalisée. C'est une simple boucle While qui demande plusieurs files d'attente si elles ont du travail. Je crée une instance de la classe QueueRepositoryClass, puis j'appelle la fonction GetQueueMessage.

Il semble que, pour une raison quelconque, plusieurs threads atteignent ma méthode GetQueueMessage et utilisent la même instance de fileClient. Peut-être est-ce un résultat de moi ruser l'objet CloudStorageAccount? Ou est-ce la méthode d'extension CreateCloudQueueClient?

Répondre

0

je suis passé à utiliser les méthodes Async QueueClient et le système effectue beaucoup mieux maintenant.

3

Sans voir le code appelant, c'est en partie une spéculation, mais il semblerait que vous appeliez GetMessage() dans une boucle assez serrée. GetMessage est un appel synchrone, ce qui rend ce bloc de thread particulier en attente d'une réponse de la file d'attente (les autres threads continuent à s'exécuter). Dans un profileur, cela aura l'air vraiment mauvais b/c le reste de la logique de la boucle s'exécute si rapidement (c'est-à-dire que vous passez un ms ou deux en train d'obtenir un message, ressemblera exactement à ça).

Une autre note, vous devez être très prudent dans l'interrogation de la file d'attente des boucles serrées pour plusieurs raisons:

1) Bien que le taux par Tx est faible, ce n'est pas 0. Je suggère généralement un dégagez logique - c'est-à-dire si la file d'attente est vide, attendez 100ms avant de vérifier à nouveau. Vider deux fois, reculer à 500 ms, etc. Évidemment, vous devez équilibrer cela avec l'expérience utilisateur que vous recherchez.

2) Si vous finissez par mettre à l'échelle l'application, vous créez effectivement une attaque DoS contre les files d'attente. 100 instances qui battent une queue dans une boucle serrée peuvent vraiment nuire à perf.

Pat

Questions connexes