Partager via


Considérations relatives au multitâche

La recommandation recommandée est d’utiliser le moins de threads possible, ce qui réduit l’utilisation des ressources système. Les performances en sont alors améliorées. Le multitâche a des besoins en ressources et des conflits potentiels à prendre en compte lors de la conception de votre application. Voici les exigences en matière de ressources :

  • Le système consomme de la mémoire pour les informations de contexte requises par les processus et les threads. Par conséquent, le nombre de processus et de threads pouvant être créés est limité par la mémoire disponible.
  • Le fait de suivre un grand nombre de threads consomme un temps processeur non négligeable. S’il y a trop de threads, la plupart d’entre eux ne pourront pas faire de progrès significatifs. Si la majorité des threads en cours se trouvent dans un même processus, les threads des autres processus sont planifiés à une fréquence moindre.

L’accès partagé aux ressources risque de créer des conflits. Pour les éviter, vous devez synchroniser l’accès aux ressources partagées. Cela s’applique aux ressources système (telles que les ports de communication), aux ressources partagées par plusieurs processus (comme les handles de fichiers) ou aux ressources d’un seul processus (comme les variables globales) auxquelles accèdent plusieurs threads. L’échec de la synchronisation correcte de l’accès (dans le même processus ou dans des processus différents) peut entraîner des problèmes tels que des blocages et des conditions de concurrence. Objets et fonctions de synchronisation que vous pouvez utiliser pour coordonner le partage de ressources entre plusieurs threads. Pour plus d’informations sur la synchronisation, consultez Synchronisation de l’exécution de plusieurs threads. La réduction du nombre de threads facilite et rend plus efficace la synchronisation des ressources.

Le serveur de pipeline constitue une bonne conception pour une application multithread. Dans cette conception, vous créez un thread par processeur et générez des files d’attente de demandes pour lesquelles l’application gère les informations de contexte. Un thread traite toutes les demandes d’une file d’attente avant de traiter les demandes dans la file d’attente suivante.