Contenu | Rechercher | Menus

Annonce

Si vous avez des soucis pour rester connecté, déconnectez-vous puis reconnectez-vous depuis ce lien en cochant la case
Me connecter automatiquement lors de mes prochaines visites.

À propos de l'équipe du forum.

#1 Le 29/05/2006, à 22:08

NicoA380

Nombre de thread maximum : 382 ??

Salut,

on fait de la programmation système à l'école, donc on fait un peu mumuse avec les threads. J'ai fait un code pour trouver le nombre maximum de thread que l'on peut créer dans un programme.

#include <unistd.h>
#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>

void* f(void* _){
	while(1)sleep(10);
}

int main(){
	int cpt=0,res=0;
	while(!res){
		pthread_t* tid = (pthread_t*)malloc(sizeof(pthread_t));
		if(! (res=pthread_create(tid,NULL,f,NULL))){
			cpt++;
			usleep(50000);
		}
	}
	printf("nombre maximum de thread : %i\n",cpt);
}

g++ -o maxthread maxthread.C -lpthread

Mais voilà qu'à l'exécution, sur 3 architectures différentes, j'obtiens 382 threads dans tous les cas (PIII 700, bi-PIII 800, Athlon 2000+).

Des copains sous d'autres distrib n'ont pas une limite si basse. Alors j'ai cherché un peu sur google si Ubuntu impose se genre de limite.

J'ai pas trouvé grand chose :
- "ulimit -u" donne "unlimited"
- "cat /proc/sys/kernel/threads-max" donne "14335"

Je pense que c'est le nombre de thread cumulé à tous les processus.


La question :
quelqu'un sait où régler le nombre de thread maximum par processus ?

Hors ligne

#2 Le 30/05/2006, à 15:11

gene69

Re : Nombre de thread maximum : 382 ??

oui tu as de la chance moi j'ai longtemp cru que j'avais un probleme de synchro...

gcc sans la lib... ubuntu n'est pas faite pour le dev

Finalement ce que j'ai fait c'est que je creait les thread par paquet de 250... ok sur un serveur ça n'ira pas forcement...

Dernière modification par gene69 (Le 30/05/2006, à 15:12)


Quand le berger est lâche, le loup chie de la laine.
A (draft) guide to UFO Alien-Invasion

Hors ligne

#3 Le 30/05/2006, à 18:21

NicoA380

Re : Nombre de thread maximum : 382 ??

Comment ça ? tu décales la création des threads dans le temps ??

Il faut vivre avec cette limite sous Ubuntu ?

Ça me parait fou, car Ubuntu se tourne vers une utilisation serveur ...

Hors ligne

#4 Le 11/06/2006, à 14:47

NicoA380

Re : Nombre de thread maximum : 382 ??

J'ai trouvé la cause de cette limite, j'ai pas eut le temps d'essayer de le résoudre.

Comme tout le monde le sait, linux alloue 4Go de mémoire virutelle par processus (1Go système / 3Go utilisateur).

Il se trouve que la mémoire virtuelle utilisateur arrive à 3Go au bout des 382 threads créés. La taille de la mémoire réservée à chaque thread est trop grande, et cette valeure est certainement compilée en dur dans la librairie de thread. C'est donc spécifique à Ubuntu (ou Debian-like ?) car un camarade sous Suse arrive à créer plus de 3000 threads.

Un professeur de système m'a dit qu'il existait un moyen de configurer la taille réservée par thread directement dans le code, grâce à un paramètre de pthread_create, il m'a également parlé de pthread_stack.

J'étudirais ça en temps voulu roll

Hors ligne