Questo sito utilizza cookies solo per scopi di autenticazione sul sito e nient'altro. Nessuna informazione personale viene tracciata. Leggi l'informativa sui cookies.
Username: Password: oppure
C/C++ - Creazione thread limitata?
Forum - C/C++ - Creazione thread limitata?

Pagine: [ 1 2 ] Precedente | Prossimo
Avatar
robrock80 (Normal User)
Pro


Messaggi: 143
Iscritto: 11/12/2006

Segnala al moderatore
Postato alle 4:02
Lunedì, 05/04/2010
Salve a tutti. Non riesco a creare più di 875 thread con un processo, mi chiedevo: la creazione dei thread in Windows Vista è limitata?

Ultima modifica effettuata da robrock80 il 05/04/2010 alle 4:03
PM Quote
Avatar
Matthew (Member)
Expert


Messaggi: 387
Iscritto: 29/01/2007

Segnala al moderatore
Postato alle 5:08
Lunedì, 05/04/2010
Non c'è un limite per processo, ma c'è un limite complessivo, il quale dipende dalla RAM e altre caratteristiche del sistema.
Comunque sei proprio sicuro che ti servano tutti quei threads? Mi sembra un numero un po' eccessivo.

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 10:28
Lunedì, 05/04/2010
A parte la considerazione che è ovvio che i thread siano limitati (utilizzando risorse del sistema, quando le risorse terminano, non si possono più creare ...), se la cosa è puramente "accademica" va bene, altrimenti, tutti quei thread sono assolutamente inutili ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
robrock80 (Normal User)
Pro


Messaggi: 143
Iscritto: 11/12/2006

Segnala al moderatore
Postato alle 13:04
Lunedì, 05/04/2010
comunque il processo con 875 thread occupa a malapena 32 mega e di ram libera dopo il lancio ci sono 2,5 giga, quindi è impossibile che sia un problema di memoria: secondo me deve essere possibile alzare tale limite a meno che non sia legato a dei limiti della CPU... Da qualche parte avevo letto di aumentare le dimensione dello stack dell'eseguibile impostando un parametro del linker (io uso GCC), o anche passando le dimensioni dello stack di ciascun thread alla CreateThread, ma niente...


P.S.: sono inutili anche se il processo è un server che apre una socket condivisa fra più oggetti ognuno dei quali lancia un thread che chiama una accept bloccante?

Ultima modifica effettuata da robrock80 il 05/04/2010 alle 13:25
PM Quote
Avatar
TheKaneB (Member)
Guru^2


Messaggi: 1792
Iscritto: 26/06/2009

Segnala al moderatore
Postato alle 14:38
Lunedì, 05/04/2010
prova ad "abbassare" la dimensione dello stack. Se non ricordo male su windows c'è un limite ben preciso per l'area dello stack dei vari thread (credo sia proprio intorno a 32MB).

Se strutturi correttamente i tuoi thread, potrai farli funzionare con pochissimo stack (diciamo 4KB o meno), aumentando quindi il totale dei thread spawnabili su Windows.

PS: Mi sembra, inoltre, che nelle versioni Server di windows questo limite sia molto più alto. Probabilmente è un limite imposto proprio per impedire lo sviluppo di server multithreaded massivi sui sistemi di classe Desktop.

PM Quote
Avatar
robrock80 (Normal User)
Pro


Messaggi: 143
Iscritto: 11/12/2006

Segnala al moderatore
Postato alle 15:10
Lunedì, 05/04/2010
Codice sorgente - presumibilmente C/C++

  1. backgroundExecutor = CreateThread(NULL, 4096, (LPTHREAD_START_ROUTINE)&::doService, this, 0, &threadId);



... Niente, sempre 875

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 21:40
Lunedì, 05/04/2010
Dovresti ottenere il codice d'errore in seguito alla chiamata fallita della CreateThread (con la GetLastError).

Partendo da quel codice, si potrà capire qualcosa ...


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Avatar
robrock80 (Normal User)
Pro


Messaggi: 143
Iscritto: 11/12/2006

Segnala al moderatore
Postato alle 23:19
Lunedì, 05/04/2010
Ho stampato l'errore con la seguente riga di codice
Codice sorgente - presumibilmente Plain Text

  1. cout << GetLastError() << "\n";


l'errore è il numero 8 che nella tabella
http://msdn.microsoft.com/en-us/library/ms681382%28v=VS.85 ...
risulta essere
ERROR_NOT_ENOUGH_MEMORY: Not enough storage is available to process this command.
Ma quando avviene l'errore io ho 2,5 giga di ram disponibili!

PM Quote
Avatar
nessuno (Normal User)
Guru^2


Messaggi: 6402
Iscritto: 03/01/2010

Segnala al moderatore
Postato alle 9:46
Martedì, 06/04/2010
Non si riferisce alla quantità di memoria che hai disponibile ma, molto probabilmente, allo spazio di indirizzi virtuali esaurito per il tuo processo.

E' un limite dell'architettura a 32 bit.

Ultima modifica effettuata da nessuno il 06/04/2010 alle 9:47


Ricorda che nessuno è obbligato a risponderti e che nessuno è perfetto ...
---
Il grande studioso italiano Bruno de Finetti ( uno dei padri fondatori del moderno Calcolo delle probabilità ) chiamava il gioco del Lotto Tassa sulla stupidità.
PM Quote
Pagine: [ 1 2 ] Precedente | Prossimo