none
lancer un grand nombre de threads RRS feed

  • Question

  • bonjour tout le monde j'ai un probleme tres ambéttant en effet je developpe avec mfc et je doit manipuler un grand nombre de threads pour une simulation d'un systeme multiagents .au debut de mon programme je cree 2000 threads suspendendu avec l'option CREATED_SUSPEND de lma fonction AfxBeginThread mais lorsque je les lance tous avec la fonction ResumeThread seulement 1900 se lancent et s'execute .qu'est ce qui ne va pas ?,quel est le probleme ? et comment puis je le resoudre ?merci.
    dimanche 14 décembre 2008 20:19

Réponses

  • Il me semble que windows alloue environ 1MB par thread pour la stack.
    Si je compte bien la mémoire nécessaire pour 2000 threads devrait dépasser les 2GB et ce qui depasse les capacités d'adressage d'un process pour windows 32 bits.


    lundi 15 décembre 2008 16:03

Toutes les réponses

  • Il me semble que windows alloue environ 1MB par thread pour la stack.
    Si je compte bien la mémoire nécessaire pour 2000 threads devrait dépasser les 2GB et ce qui depasse les capacités d'adressage d'un process pour windows 32 bits.


    lundi 15 décembre 2008 16:03
  • mais est ce que je ne peut pas regler ce probleme en augmentant par exemple la taille de la pile reservée pour mon programme si oui comment le faire?
    merci.
    mardi 16 décembre 2008 21:12
  • Ce n'est pas la pile du programme qu'il faut augmenter, c'est la taille de la pile de chaque thread qu'il faut réduire:
    sur la page de CreateThread() :
    The number of threads a process can create is limited by the available virtual memory. By default, every thread has one megabyte of stack space. Therefore, you can create at most 2,028 threads. If you reduce the default stack size, you can create more threads.
    Donc, en changeant le paramètre dwStackSize il est possible d'en lancer beaucoup plus, tant que la somme de la taille de chaque pile ne dépasse pas 2GB

    mercredi 17 décembre 2008 09:09