Uma espécie de questão de novato em programação funcional aqui:
Eu tenho lido as transcrições de algumas das palestras de Rich Hickey e, em várias de suas mais conhecidas, ele recomenda o uso de filas como uma alternativa para que as funções se chamam. (Por exemplo, em design, composição e desempenho e no Simple Made Easy .)
Não entendo bem isso em vários aspectos:
Ele está falando sobre colocar dados em uma fila e depois fazer com que cada função os use? Então, ao invés da função A que chama a função B para realizar seu próprio cálculo, apenas a função B coloca sua saída em uma fila e, em seguida, a função A agarra? Ou, alternativamente, estamos falando sobre colocar funções em uma fila e aplicá-las sucessivamente aos dados (certamente não, porque isso envolveria mutação maciça, certo? E também multiplicação de filas para funções de múltiplas aridades, como árvores ou algo assim? )
Como isso torna as coisas mais simples? Minha intuição seria que essa estratégia criaria mais complexidade, porque a fila seria um tipo de estado, e então você precisa se preocupar "e se alguma outra função aparecer e colocar alguns dados no topo da fila?"
Uma resposta para uma pergunta de implementação no SO sugere que a idéia está criando várias filas diferentes. Portanto, cada função coloca sua saída em sua própria fila (??). Mas isso também me confunde, porque se você estiver executando uma função uma vez, por que ela precisa de uma fila para sua saída, quando você pode apenas pegar essa saída e colocar um nome nela como uma (var, atom, entrada em uma grande tabela de hash, o que for). Por outro lado, se uma função estiver sendo executada várias vezes e você colocar sua saída em uma fila, infligirá um estado a si mesmo novamente e precisará se preocupar com a ordem em que tudo é chamado, as funções downstream ficam menos puras, etc.
Claramente, não estou entendendo o ponto aqui. Alguém pode explicar um pouco?
Job
objeto genérico , envia-o para uma fila e faz com que um ou mais threads de trabalho funcionem nessa fila. Em Job
seguida, ele envia mais Job
s para a fila após a conclusão. Os valores retornados são substituídos por retornos de chamada nesse conceito. É um pesadelo depurar e verificar se você não possui uma pilha de chamadas, eficiente e flexível pelo mesmo motivo.