-
Title:
03-04 Batching_and_Caching
-
Description:
03-04 Batching_and_Caching
-
Eu quero lhe apresentar as minha duas
técnicas de desempenho favoritas,
-
batching e caching.
-
Como já falamos, algumas funções
ou operações
-
têm uma quantidade específica de
sobrecarga envolvida
-
que é diferente dos custos
do desempenho da operação em si.
-
Por exemplo, carregar dados em um novo
local na memória antes de executá-la,
-
ou ordenar um conjunto de valores
antes de fazer uma pesquisa por ela.
-
Quando executada múltiplas vezes,
onde múltiplas são mesmo muitas,
-
esta sobrecarga pode causar um sério
problema de desempenho para o seu app.
-
Batching é o processo de
reparar este problema de desempenho
-
tentando eliminar a sobrecarga
pela execução destas operações,
-
como dividir um carro em vez de cada um
conduzir sozinho, poupando combustível.
-
Isto é o mais comum de se ver em um código
onde você tem de preparar seus dados
-
antes de realmente operar nele.
-
Agora, por exemplo, digamos que a forma
mais eficiente de encontrar um valor
-
existente num conjunto é ordenar ele, e
depois executar uma pesquisa binária nele.
-
Agora, espere, na verdade, esta não é
a forma mais eficiente,
-
mas fique comigo,
estou tentando demonstrar algo.
-
Bem, a forma mais simples de fazer isto
seria escrever uma função onde,
-
dado um conjunto e um valor,
-
vai ordenar o conjunto e depois pesquisar
para ver se o valor existe nele.
-
Agora, isto pode funcionar em
alguns níveis de desempenho,
-
mas, digamos que você tem
cerca de 10.000 valores que quer testar,
-
e, o tamanho do conjunto
é na ordem dos milhões.
-
Subitamente, você incorre em
muitas sobrecargas por teste
-
na forma da ordenação.
-
A resposta aqui é muito clara.
-
Você iria querer criar uma versão
ordenada do conjunto uma vez,
-
e depois permitir que os 10.000 valores
sejam testados para inclusão após isso.
-
Isto é batching em ação.
-
Nós fatoramos a operação que
é repetida e fazemos isso uma vez.
-
Agora, semelhante a isso é
um conceito conhecido como caching
-
e que é de longe a mais importante técnica
de desempenho que você pode enterder,
-
principalmente porque ela dirige tudo
na tecnologia moderna de computadores.
-
Considere seu computador, por exemplo.
-
O objetivo da sua RAM é fornecer
um lugar para armazenar informação
-
que é mais rápida de acessar
pela CPU do que pelo HD.
-
Ou considere a rede, e
olhe para a internet moderna,
-
enormes armazéns de servidores chamados
data centers existem em todo o mundo.
-
Sua única finalidade é armazenar em cache
conteúdo acessado com frequência
-
para que seu computador não tenha de acessar
um servidor a 12.000 milhas de distância
-
cada vez que seu amigo no Egito
posta uma foto.
-
Bem, a não ser, claro, que você esteja
no Egito, mas você percebeu a ideia.
-
Agora, em seu código, o lugar mais comum
onde você pode encontrar otimizações
-
para caching tem a ver com dados que
são calculados múltiplas vezes,
-
mas, o resultado é sempre o mesmo.
-
Por exemplo, se você está no meio
de um loop onde está calculando
-
a derivada de uma matriz
quatro por quatro,
-
e esse resultado é sempre o mesmo, então
você está desperdiçando desempenho,
-
recalculando o mesmo em
cada iteração desse loop.
-
Em vez disso, calcule e salve os
resultados dessa derivação fora do loop,
-
e depois deixe as porções interiores do loop
acessar os resultados de referência.
-
A razão porque adoro batching
e caching é porque
-
quase qualquer melhoria de desempenho
que você possa pensar,
-
incluindo as que estamos
falando neste curso,
-
é efetivamente uma variação
destas duas técnicas básicas.
-
E se você quer mesmo
se tornar um ninja do desempenho,
-
então é melhor se tornar um pro
no que significa alavancar
-
o imenso poder destas técnicas.
-
Então, vamos começar.