2009-12-22 13 views
11

È possibile modificare in qualsiasi modo il limite del numero di pthread che un processo può creare? Attualmente sul mio sistema linux posso creare circa 380 thread ma voglio aumentare quello per dire finchè la memoria è disponibile.Modifica del limite del numero massimo di pthreads da un'applicazione

+2

Interessante ... avete considerato alcune delle implicazioni di tale sistema di design? Viene in mente Single Point Of Failure (SPOF). – jldupont

+0

Non sono esperto, ma scommetterei che avere più di 380 thread sovraccarichi il tuo processore con le opzioni di contesto. Il cambio di contesto per un thread è inferiore rispetto a un processo separato, ma è comunque necessario salvare il contatore del programma e registrare il file e forse alcune altre cose che sto dimenticando. Quanti thread pensi di aver bisogno? Suggerirei di profilare la vostra applicazione per determinare il sovraccarico del thread per 10 thread rispetto a 100 thread e quindi tentare di estrapolare il numero di thread di destinazione. Potresti scoprire che non ne vale la pena. O forse ho sbagliato ... –

+0

Non lo userò praticamente da nessuna parte ... ma ne ho bisogno per alcuni esperimenti? – Sukanto

risposta

1

Guardate questa:

Maximum number of threads per process in Linux?

e dare un'occhiata a questo come potrebbe appartenere alla tua domanda:

Serve one client with each server thread

+0

' gatto?/proc/sys/kernel/threads-max' mostra '16384' .Ma non riesco a creare più di 380 pthreads.Ho persino provato a mettere una funzione vuota come corpo dei thread. – Sukanto

+0

quale errore ottieni? –

+0

dopo 380 thread ottengo 'EAGAIN' come valore di ritorno di' pthread_create() ', che secondo' pthread_create() 'man page è" Il sistema non aveva le risorse necessarie per creare un altro thread, o il limite imposto dal sistema sul il numero totale di thread in un processo {PTHREAD_THREADS_MAX} verrà superato. " – Sukanto

3

Il tuo problema è che non hai chiamato pthread_detach su i fili in questione. Questo indica che le risorse associate a ciascun thread verranno rilasciate quando il thread termina. Devi chiamare pthread_join o pthread_release su tutti i thread per rilasciare le risorse del thread. Ciò significa che devi anche chiamare pthread_detach nei tuoi gestori di cancellazione pthread_join o perdite.

6

ridurre le dimensioni dello stack dell'utente 'ulimit -s 1024';

default: 8MB 
reduced: 1MB 

per aumentare il numero di thread.

impostare la dimensione dello stack: pthread_attr_setstacksize(1024)

Problemi correlati