Apêndice A. Dicas para Desenvolvedores

Todo livro texto de programação bom cobre os problemas com alocação de memória e o desempenho de funções específicas. A medida que você desenvolve seu software, tome consciência dos problemas que podem aumentar o consumo de energia nos sistemas no qual o software executa. Embora estas configurações não afetam toda linha de código, você pode otimizar seu código em áreas que são funis frequentes para desempenho.
Algumas técnicas que são problemáticas são:
  • usando opções:
  • ativamentos de CPU desnecessárias e o uso ineficiente do mesmo. Se você precisa realizar um ativamento, faça tudo de uma só vez (vá direto para modo ocioso) e o mais rápido possível.
  • usasndo o [f]sync() sem necessidade.
  • polling ativo desnecessário ou uso de timeouts regulares e curtos. (Reativar para eventos).
  • o uso ineficiente do ativamento (wake-ups)
  • acesso ineficiente ao disco. Use buffers grandes para evitar acesso ao disco frequente. Grave um bloco grande por vez.
  • Uso ineficiente de timers. Timers de grupo nos aplicativos (ou até nos sistemas) se possível.
  • E/S excessiva, consumo de energia, ou uso de memória (incluindo vazamento de memória)
  • realizando computação desnecessária.
As seções a seguir examinam algumas destas áreas em detalhes.

A.1. Usando Opções

acredita-se que o uso de opções faz com que os aplicativos tenham um melhor e mais rápido desempenho, mas isto não é verdadeiro para todos os casos.
Python

Python usa o Global Lock Interpreter[1], portanto o uso de opções é lucrável somente para operações de E/S maiores. Unladen-swallow [2] é uma implementação mais rápida do Python com o qual você deve ser capaz de otimizar seu código.

Perl

As opções do Perl foram criadas primeiramente para aplicativos que são executados em sistemas sem divisão (tal como sistemas com sistemas operacionais de 32-bits Windows). Nas opções do Perl, os dados são copiados para cada opção (Copiar na Gravação). Os dados não não compartilhados por padrão pois os usuários deveria ser capazes de definir o nível de dados compartilhados. Para compartilhamento de dados, o módulo threads::shared deve ser incluído. No entanto, os dados não devem ser só copiados (Copiar na Gravação), mas o módulo também cria variáveis ligadas para os dados, o qual leva ainda mais tempo e é mais lento. [3]

C

As opções C compartilham da mesma memória, cada opção possui sua própria pilha e o kernel não precisa criar novos descritores de arquivo e alocar espaço de memória novo. O C podem realmente usar o suporte para mais CPUs por opções. Portanto, para maximizar o desempenho de suas opções, use uma linguagem de baixo nível como o C ou C++. Se você usar uma linguage de script, considere utilizar um C binding. Use donos de perfis para identificar o pouco desempenho de partes de seu código.[4]