Threads vs Processus dans Linux

J'ai récemment entendu quelques personnes dire que sous Linux, il est presque toujours préférable d'utiliser des processus au lieu de threads, étant donné que Linux est très efficace dans le traitement des processus, et parce qu'il ya tellement de nombreux problèmes (tels que le verrouillage) associés avec les threads. Cependant, je me méfie, car il semble que les threads pourrait donner un assez gros gain de performances dans certaines situations.

Donc ma question est, lorsqu'ils sont confrontés à une situation que les threads et les processus pourrait à la fois gérer assez bien, dois-je utiliser des threads ou processus? Par exemple, si j'avais écrit un serveur web dois-je utiliser des threads ou processus (ou une combinaison)?

  • Est-il une différence avec Linux 2.4?
  • La différence entre les processus et les threads sous Linux 2.4, c'est que les threads partagent plusieurs parties de leur état (espace d'adressage, les descripteurs de fichiers, etc) que sur les processus, qui n'est généralement pas le cas. La NPTL sous Linux 2.6, en fait un peu plus clair, en leur donnant "thread groupes" qui sont un peu comme des "processus" dans win32 et Solaris.
  • Oui, NPTL est agréable: il fait des choses comme tuer, exec, etc. travailler comme vous pouvez vous attendre dans un programme multi-threadé (l'ancien LinuxThreads comportements de sens compte tenu de la mise en œuvre, mais ont été dégueulasse). Otoh, que d'un "groupe de thread" est juste une collection de "fils", et ne prennent pas vraiment de ressources lui-même, c'est donc un ton plus léger qu'un NT ou Solaris processus.
  • httpd.apache.org/docs/2.0/mod/worker.html est la valeur par défaut pour le serveur web apache. son multi processus multi-thread de configuration.
  • La programmation simultanée est difficile. Sauf si vous avez besoin de très haute performance, l'aspect le plus important dans votre compromis sera souvent le difficulté de débogage. Processus pour le beaucoup plus facile de solution à cet égard, parce que toute communication est explicite (facile à vérifier, journal, etc.). En revanche, la mémoire partagée threads crée des gazillions de lieux où un thread peut, à tort, de l'impact de l'autre.
  • La programmation simultanée peut être multi-thread ainsi que multi-processus. Je ne vois pas pourquoi vous êtes en supposant que la programmation simultanée est multithread seulement. Il pourrait être en raison de certaines limitations de langue, mais en général, il peut être les deux.
  • Je lien Lutz est simplement indiqué que la programmation simultanée est difficile, selon ce qui est choisi processus ou threads - mais que, parallèlement à la programmation à l'aide de processus facilite le débogage dans de nombreux cas.

InformationsquelleAutor user17918 | 2009-04-30