Sto scrivendo un codice che genera alcuni thread (circa 512 al momento, ma potrebbe aumentare in futuro). Ciascuno dei thread esegue solo una piccola quantità di operazioni, quindi voglio che il sovraccarico che i thread si posizionano sul sistema sia mantenuto al minimo.Dimensioni dello stack di thread sicuro?
Sto impostando la dimensione dello stack utilizzando pthread_attr_setstacksize()
e posso ottenere la dimensione minima dello stack consentita da PTHREAD_STACK_MIN
. Ma la mia domanda è: È sicuro usare PTHREAD_STACK_MIN
per le dimensioni dello stack di thread? Come faccio a calcolare la quantità di stack di cui ho bisogno? Ci sono delle spese generali nascoste che dovrò aggiungere al mio calcolo?
Inoltre, esistono altre tecniche che posso utilizzare per ridurre il carico dei thread sul sistema?
Grazie Matt. Penso che questo sia il più vicino alla mia risposta. Speravo che qualcuno dicesse "aggiungi la sizeof() di tutte le variabili locali, aggiungi 42 byte per l'overhead del thread e poi aggiungi il 10% per buona fortuna", ma sembra che ci siano potenzialmente molti più fattori in gioco. Grazie per i suggerimenti su priorità e sospensione. –
@ ltn100: no, è più come "testare accuratamente il codice con una dimensione dello stack specificata, in un contesto di debug che rileverà l'overflow, quindi aggiungere il 10% per la buona fortuna". –
@ ltn100: Se riesci a trovare uno strumento di debug che misura effettivamente l'utilizzo di stack di high water sulla tua piattaforma, va bene, ma le piattaforme in cui devi effettivamente farlo (perché lo stack è RAM fisica in primo piano) non sono necessariamente quelli con i migliori strumenti di debug. E devi essere * veramente * approfondito con i test. Qualsiasi piccola cosa, incluse le modifiche alle librerie alle quali si collega dinamicamente, o le variabili d'ambiente che guardano, o (letteralmente) il giorno della settimana, potrebbe aumentare il tuo high-mark. Evita i VLA, evita qualsiasi ricorsione dipendente dai dati di input. –