Executando verificação de segurança...
1

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.

Carregando publicação patrocinada...
-2

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.

0

Não está errado pensando em um cenário irrealista e específico de CPU single-core com um único processo em execução. Isso vale para uma explicação didática e simplificada. Se o objetivo for ensinar um leigo no assunto, é válido. Pois simplificações facilitam o entendimento.

Mas o problema é quando a gente pensa na vida real, um sistema operacional real em um hardware real rodando um software real — que não é simples assim. É aí que a percepção de que "Isto é mais lento" está tecnicamente errada. Pois na vida real tem menos de 0.1% de chance de você está programando para uma CPU single-core 100% dedicada ao seu software, sem nenhum outro processo usando threads.

E não tenho motivos para explicar para ele. Provavelmente ele até já entende isso.


EDIT (16/04/2025): Em resposta a desonestidade intelectual cometida no comentário acima, de editar o comentário muitos dias depois para inserir uma informação que não condiz com a realidade, vale deixar o link do comentário onde a "outra pessoa" não foi capaz de refutar o que eu disse: https://www.tabnews.com.br/Silva97/863574db-1933-4220-9865-a32bf1653ded

Como dizem: contra fatos não há argumentos. Existem evidências empíricas do ganho de performance e apresentei elas na discussão que, como esperado, ninguém foi capaz de refutar.

Dizer "você está errado" não vale de nada a partir do momento que eu provo que estou certo e, ainda por cima, o outro lado não é capaz de provar que a minha evidência é inválida e/ou apresentar contra-argumentos.

Como diz o Torvalds: Talk is cheap, show me code.

Enquanto eu mostro o código, eles falam.

E diferente da mentira que foi dita acima, em momento algum eu pensei que o Eric esteja errado. Como falei: acredito plenamente que ele sabe disso. O erro não foi cometido pelo Eric.

Essa é apenas uma tentativa rasa de apelo à autoridade, tentando terceirizar a culpa do próprio erro para uma autoridade que não tem a ver com o assunto.

Leigos fazem isso o tempo todo. Eu vejo com muita frequência leigos tentando repetir o que uma autoridade disse mas, por erro de entendimento/interpretação, repetem errado. E daí quando alguém aponta o erro da pessoa os leigos sempre dizem a mesma coisa:

Ah, então tu acha que o <nome-da-autoridade> tá errado? Você que é o fodão, né? Se achando melhor que o <nome-da-autoridade>.

Não, colega. Não é ele que está errado.