Domanda successiva da Multi-core usage, threads, thread-pools.Movimento .NET di thread tra core
I fili vengono spostati da un nucleo all'altro durante il loro ciclo di vita?
Naturalmente. Immagina di avere tre thread in esecuzione su un sistema dualcore. Mostrami un programma corretto che non prevede coinvolgere regolarmente i fili tra i core.
Questa è la mia prima volta su questo sito, quindi non ho avuto abbastanza rep per commentare credo. Ho deciso di fare una nuova domanda facendo riferimento a quella su cui volevo commentare.
Qual è il processo di selezione di un nucleo in cui spostare un thread. È come se lo scheduler avesse un elenco di thread che necessitava di tempo di elaborazione e, man mano che uno finisce, ne inserisce un altro?
Inoltre, mi chiedevo se esiste un riferimento per l'affermazione che i thread vengano spostati tra i core. O è solo considerato "conoscenza comune"?
Grazie!
Si tratta semplicemente di "la cache era già su questo core, quindi questa ha una maggiore probabilità di ottenere il thread indietro"? Sembrava essere più complicato di quello dopo aver letto "Fast Switching of Threads Between Core" di Strong e Tullsen et al. e "Implicazioni delle prestazioni della migrazione a singolo thread su un chip multi-core" di Constantinou, Sazeides et al. Se si tratta solo della cronologia della cache, allora lo scheduler di Windows è sotto il gruppo di "qualsiasi programma di pianificazione intelligente" o dovrebbe essere prestata attenzione per garantire che la pianificazione sia "intelligente"? – mphair
È più come "questo thread è stato eseguito su questo core e probabilmente (a causa di cose come la cache della CPU) probabilmente verrà eseguito più velocemente se lo pianifico nuovamente su questo core". Non ho letto i documenti che citi, quindi non posso commentare su di loro. Gli algoritmi di pianificazione in Windows e in altri sistemi sono più avanzati di quelli a cui li ho generalizzati, ma l'idea è la stessa. È più veloce eseguire un thread sullo stesso core, quindi è più probabile che lo scheduler lo riporti lì. Ma nessuna garanzia se non si imposta manualmente l'affinità del thread. –