2015-03-04 1 views
0

J'ai lu que le nombre idéal pour passer au paramètre NumberOfConcurrentThreads de la fonction CreateIoCompletionPort() est 0, qui se traduira par le nombre de cœurs.Combien de threads devrais-je créer pour IOCP?

Cependant, le nombre de threads je fait créer qui attend sur le port d'achèvement, devrait-il être aussi le même que le nombre de cœurs?

+1

Si vous faites beaucoup d'autres * attend * (sur des choses autres que le port d'achèvement) d'une durée non négligeable, alors il est logique d'avoir des fils supplémentaires de manière à pouvoir être pleinement utilisé la CPU. Si vous n'attendez jamais autre chose que le port d'achèvement, AFAIK, il n'y a aucune raison d'en avoir plus d'un par core. Je pense que vous devez expérimenter pour trouver le meilleur équilibre pour votre application particulière. (Bien sûr, pour de nombreuses applications dans le monde réel, un ou deux fils peuvent gérer facilement tout le trafic. Cela dépend de la quantité de charge.) –

Répondre

1

Cette question est impossible de répondre à un certain nombre définitif ce nombre dépend de beaucoup d'autres facteurs dans la conception de votre code. Des facteurs tels que le nombre d'autres threads présents, la fréquence à laquelle les threads de ce IOCP fonctionnent, ce qui les bloque, combien de cœurs, etc.

Mon approche préférée est de configurer le nombre de threads de manière externe afin que vous puissiez profiler votre code une fois qu'il fonctionne et régler le nombre de threads.

Dans de nombreux modèles, et avec du matériel moderne, je trouve qu'un petit nombre de threads est plus que suffisant, et ce nombre est souvent beaucoup moins que le nombre de cœurs.