Como calcular o tempo de computação geral para um processo multiencadeado

Eu tenho um conjunto de tarefas, vamos chamá-loT[], onde cada tarefaT[i] precisa de uma certa quantidade de tempot(T[i]) ser processado. As tarefas estão sendo processadas em paralelo porX encadeamentos (isso não significa que vários encadeamentos estão trabalhando em uma única tarefa, mas que várias tarefas estão sendo processadas por vários encadeamentos, cada encadeamento executando uma tarefa, depois a próxima, etc.).

Agora, quero calcular o tempo total esperado para processar todas as tarefas. É fácil, desde quesize(T[]) <= X é claro (ou seja, o número de tarefas é menor ou igual ao número de threads); nesse caso, o tempo total é igual ao tempo da tarefa mais lenta.

Mas estou muito perdido para o casoX < size(T[]) (ou seja, tenho menos threads do que tarefas). Como alguém calcularia isso de uma maneira elegante?

editar: Como solicitado por um comentarista, podemos assumir que a fila de tarefas é ordenada pela tarefa de execução mais longa primeiro, pela tarefa de execução mais curta por último. Além disso, podemos assumir que não há pausas entre tarefas e também podemos negligenciar o que o agendador do SO está fazendo.

questionAnswers(2)

yourAnswerToTheQuestion