Excelente pergunta. Não me lembro do curso CS 102 mencionando um único aplicativo para a fila dupla.
Até hoje, o único aplicativo que conheço é o agendador de roubo de trabalho mencionado no artigo da Wikipedia .
Funciona essencialmente da seguinte maneira:
Em um modelo de procedimento normal e de thread único, toda chamada de função envia um registro de ativação para a chamada pilha de chamadas . Um registro de ativação contém as variáveis e parâmetros locais dessa chamada. Depois que a chamada para o método é concluída ("retorna"), o último registro de ativação é exibido na pilha de chamadas.
Isso é particularmente importante porque é assim que a recursão é implementada: a estrutura da recursão é representada no estado atual da pilha de chamadas.
Ao paralelizar um algoritmo recursivo, podemos explorar essa propriedade substituindo a pilha de chamadas por uma fila de chamadas. Cada encadeamento na computação obtém sua própria fila de chamadas e envia e lança registros de ativação como em uma execução seqüencial.
Porém, quando um segmento termina seu trabalho (= sua fila de chamadas está vazia), rouba o trabalho de outro segmento, removendo um registro de ativação da fila de chamadas desse segmento, removendo da extremidade "incorreta".
Basicamente, a fila de chamadas atua como duas pilhas de chamadas que agora atendem a dois threads.