Ho studiato diversi algoritmi di pianificazione per un pool di thread che sto implementando. A causa della natura del problema che sto risolvendo, posso supporre che le attività eseguite parallelamente siano indipendenti e non generino nuove attività. Le attività possono essere di dimensioni diverse.Il furto del lavoro è sempre l'algoritmo di schedatura del thread di livello utente più appropriato?
Sono andato immediatamente per l'algoritmo di programmazione più popolare "rubare il lavoro" utilizzando deques lock-free per le code di lavoro locali, e sono relativamente soddisfatto di questo approccio. Tuttavia mi chiedo se ci siano casi in cui il furto del lavoro non è l'approccio migliore.
Per questo particolare problema che hanno una buona stima della dimensione di ogni singola attività. Il furto del lavoro non fa uso di queste informazioni e mi chiedo se ci sia uno schedulatore che fornirà un migliore bilanciamento del carico rispetto al furto del lavoro con queste informazioni (ovviamente con la stessa efficienza).
NB. Questa domanda si lega con un precedente question.
So poco di questo subeject, ma forse alcune delle risposte a questa domanda correlata saranno utili: http://stackoverflow.com/questions/2552810/work-stealing-vs-work-shrugging –