1. A method for thread management in parallel processes, comprising: initializing each process comprising one or more threads that are executed upon multiple cores or multiple nodes, the initializing including identifying parallel constructions, synchronizing between threads and processes, and identifying potential correlations between processes; receiving monitored hardware metrics information from the multiple cores or multiple nodes on which processes are executed, wherein the monitored hardware metrics comprise specific monitored hardware counts, the counts retrieved from respective counters from each core or node, wherein the counters are registers that store the specific monitored hardware counts; receiving monitored process and thread information; using the monitored process and thread information for compiler analysis for a next compilation; globally monitoring the processing across the multiple cores or multiple nodes; analyzing the monitored information to minimize imbalances between the multiple cores or multiple nodes or to improve core or node exploitation; and dynamically adjusting the number of threads per process based on the analysis.