Como posso saber se estou usando demais o multi-threading?

15

No momento, sinto que estou usando multitarefas em excesso.

Eu tenho 3 tipos de dados, A, B e C.

Cada A pode ser convertido em vários B s e cada B pode ser convertido em vários C s.

Estou interessado apenas em tratar C s.

Eu poderia escrever isso facilmente com algumas funções de conversão. Mas eu me peguei implementando com threads, três filas ( queue_a , queue_b e queue_c ). Existem dois encadeamentos fazendo as diferentes conversões e um trabalhador:

  • ConverterA lê de queue_a e grava em queue_b
  • ConverterB lê de queue_b e grava em queue_c
  • Worker manipula cada elemento de queue_c

As conversões são razoavelmente mundanas e não sei se esse modelo é complicado demais. Mas parece extremamente robusto para mim. Cada "conversor" pode começar a funcionar mesmo antes que os dados cheguem às filas e, a qualquer momento no código, eu possa "enviar" novos A s ou B s e ele acionará o pipeline de conversão, que por sua vez acionar um trabalho pelo thread de trabalho.

Até o código resultante parece mais simples. Mas ainda não tenho certeza se estou abusando de tópicos para algo simples.

    
por exhuma 06.11.2013 / 14:25
fonte

1 resposta

16

É quase sempre mais simples pensar sequencialmente e depois modificar essa lógica para funcionar melhor usando threads. E, como a expressão diz: "Se não está quebrado, não conserte". A maioria dos programadores não usa threads simplesmente porque não há necessidade de usá-los.

Se você se sentir mais à vontade usando-os, mais poder para você. No entanto, saiba que, se os segmentos não oferecerem um aumento de velocidade eliminando os gargalos, eles quase certamente retardarão seu programa.

Considere também que os sistemas que dedicam apenas uma CPU a um processo simularão vários threads por um único thread para economizar recursos (isso não acontece com freqüência com os computadores modernos, embora os aplicativos para smartphones ainda estejam muito sujeitos a esse abuso ). Neste caso, mesmo que você esteja eliminando gargalos através do uso de encadeamentos, ele será mais lento do que se você não usasse encadeamentos.

E, talvez a razão mais sutil para usar cautela ao usar threads, mas certamente não menos importante, os threads tendem a fazer o que você não espera. Sim, se você está tomando precauções, você deve ficar bem. Sim, se seus threads não escrevem para variáveis compartilhadas entre threads, você deve estar bem. Dito isso, os bugs relacionados a threads são muito difíceis de encontrar. Desde que eu sou da idéia de que um programador não pode eliminar completamente a possibilidade de criar erros no código e, portanto, um programador deve tomar medidas para proteger contra possíveis erros ao invés de se concentrar em eliminá-los completamente, você deve definitivamente aplicar essa idéia para encontrar erros de thread também. Em outras palavras, saiba que apesar de seus melhores esforços, o uso de threads no código quase certamente criará alguns bugs muito sérios, mais cedo ou mais tarde, que você não teria de outra forma sem usar threads.

Então, você deve usar tópicos de qualquer maneira? Bem, um conhecimento saudável de tópicos certamente não é uma coisa ruim, especialmente se você se tornar bom nisso. No entanto, o movimento de tarde tem sido em direção a linguagens single-threaded, como node.js. Uma das principais vantagens de ter um único thread é que é fácil dimensionar e certas otimizações podem ser feitas se você souber que as instruções devem ser executadas em seqüência (mesmo que otimizações possam significar que instruções que podem ser executadas em paralelo podem ser executado de forma assíncrona).

Dito isso, eu digo o que é mais confortável para você. Na minha experiência, escrever um programa que você entende tem maior prioridade do que fazê-lo funcionar mais rápido. Só não se esqueça de usar tópicos quando você acha que ajuda a escrever o programa, e não porque você quer que ele funcione mais rápido, já que você não deve se preocupar tanto com o desempenho como você está escrevendo o programa (otimização é importante, mas também pode esperar).

    
por 06.11.2013 / 15:33
fonte