Isso fica mais rápido? Não, claro que não. Isto é mais lento. Adicionando mais threads não faz nada mais rápido. Threads não são mágicas. Se um processador é capaz de fazer um bilhão de operações por segundo, acrescentando outra thread não fará o processador executar outro bilhão de operações por segundo. Em vez disso, ele rouba recursos de outras threads. Se uma moto pode correr a 180 km/hora, pará-la para que outro piloto suba nela não irá tornar a entrega mais rápida! Claramente, em média, as cartas não estão sendo entregues mais rapidamente neste esquema, elas apenas estão sendo entregues em uma ordem diferente.
A analogia com o motoboy foi boa mas está tecnicamente errada ao pensar em um cenário real de um sistema operacional. Pois a moto não está sendo compartilhada somente com os dois motoboys que você contratou, ela está sendo compartilhada com milhares de motoboys que estão trabalhando ao mesmo tempo no sistema operacional.
Digamos que hajam 100 threads ao todo no sistema e 1 para o seu software, o que significa que o seu software usa 1/100 da capacidade do processador. Adicione mais uma thread e agora seu sofware usa 2/101 (2/101 > 1/100
) da capacidade do processador.
Não é o dobro de performance como a galera que não entende de concorrência acha que é, mas existe de fato um ganho de performance. Não é a mesma capacidade sendo dividida por dois igual foi explicado no post. A explicação também não leva em consideração multicore, hyper-threading e a priorização de tarefas do kernel — quanto mais CPU uma thread consome, menos ela é priorizada. Logo dividir o trabalho em dois (ou mais) pode evitar que o processo tenha a performance prejudicada pelo escalonador de tarefas.
A comparação não é minha, é do Eric Lippert, você pode explicar para ele que está errado, está nos links mas para facilitar: https://stackoverflow.com/a/2902718/221800 e https://stackoverflow.com/a/17280253/221800 e https://stackoverflow.com/a/6036611/221800.
Parece que a discussão continuou em: https://www.tabnews.com.br/Silva97/usar-mais-threads-e-mais-lento. Lá o texto dele não é claro, tem erros e não conseguiu responder a minha pergunta que foi enfatizada por outros usuário. Por isso eu ainda achoi bom explicar para o Eric que ele está errado, senão fica com cara de achismo como foi dito claramente aqui, não adianta achar que ele sabe o certo, se ele achasse diferente ele teria escrito. Aparentemente o comentário mostra que a pessoa não entendeu como funciona e/ou não entendeu o texto se atendo a um trecho e ignorando o resto, além o parágrafo seguinte na nova seção já fala de uso de múltiplos processadores e como isso deixa mais rápido adicionando thread.