Memória ou CPU intensiva. O que você faz?

Quando você fez esse último projeto, considerou se o código que estava escrevendo exigia muito da memória ou da CPU? Você provavelmente não fez isso, a menos que programe para dispositivos incorporados, caso em que provavelmente passará muito tempo se preocupando com isso. É uma questão fundamentalmente importante no mundo onde o hardware do computador pode ser tão diferente e tão raro. Os programas são executados em várias máquinas e às vezes com hardware diferente. Às vezes, mesmo em um ambiente controlado como uma empresa, esse hardware pode ser tributado por outros aplicativos que precisam ser executados ao mesmo tempo que o seu. Por que você não está considerando se seu código é intensivo em memória ou em CPU? Você entende a diferença?

Me diverte que este seja um assunto que nunca aparece. Se você fizer uma pesquisa no Google por qualquer combinação dos itens acima e código ou programação, você realmente não obterá tantos resultados! Alguns dos resultados são perguntas simples sobre por que este programa é um ou outro e menos ainda são perguntas sobre onde encontrar exemplos de código para ambos. Me diverte a perspectiva de que, em geral, tornou-se um fato aceito que não precisamos mais nos preocupar com isso. Mais e mais código hoje é lançado com obstáculos e, às vezes, vazamentos de memória fatais. Este é um conceito simples e básico que qualquer pessoa aprende com ou sem um diploma. No entanto, isso acontece agora mais do que nunca e em produtos comerciais nem menos. Isso apenas mostra o abandono com que codificamos hoje em dia.

Então eu comecei a me perguntar. Alguém ainda pensa nisso? Ou sabe dizer qual é qual? Ou se importe? Os projetistas de sistemas embarcados estão, é claro, isentos dessa questão. Eles programam dispositivos que, por sua natureza, exigem que eles entendam quanta energia e memória eles têm disponíveis. Isso não quer dizer que os sistemas embarcados não tenham seus próprios problemas ou que as pessoas que codificam para eles não tenham vazamentos de memória ou cometam o erro de não se importar com o quão intensivo é o seu aplicativo, mas geralmente são menos culpados por isso pela natureza do que eles programam.

Por que eu deveria me importar? Essa é a nova questão, certo? Hoje em dia, os computadores vêm de fábrica com processadores dual core ou quad core, às vezes com 8 núcleos lógicos e pelo menos 4 GB de memória, então por que devo me preocupar se meu código é de memória ou CPU intensivo? Há uma resposta de uma palavra para essas perguntas: Velocidade. Embora possa ser uma expectativa relativamente normal hoje, você provavelmente não precisa se preocupar com essas coisas em geral, mas isso não significa que você não deva. Ele pode resolver vários problemas e aumentar a velocidade geral ao ser capaz de enviar certas atividades para a memória e certas atividades para a CPU. Em outras palavras, entender o relacionamento permite que você, de certa forma, faça o computador trabalhar a seu favor, em vez de contra você.

Em última análise, os computadores trabalham contra nós. Eles são uma ferramenta muito geral e essa é sua maior força e fraqueza. Seu computador é uma calculadora, um calendário, um cliente de e-mail, um navegador da web, um reprodutor de jogos, um reprodutor de música, um reprodutor de vídeo, um gigante que cria planilhas, mas aí estão os problemas. Foi construído para fazer tudo isso de forma eficaz, mas não muito bom. Saber como balancear memória e CPU pode tornar sua programação melhor.

Estou pensando em escrever alguns tutoriais sobre este tópico. Como planejar código intensivo de memória e CPU e como equilibrar ambos em projetos. No momento, este post foi feito como uma introdução ao tópico e também como minha primeira dica profissional. Até logo. Provavelmente escreverei o primeiro tutorial esta noite ou amanhã.