Considerações de desempenho ao usar o Go para meu projeto

5

Eu estou olhando para usar Go (aka golang) para um projeto (um banco de dados SQL, mas isso não importa principalmente aqui) onde o desempenho é crítico, mas sob carga baixa o gargalo principal será E / S para disco . Nesse caso, acho que o Go seria ótimo!

Sob carga alta ou durante muito cache, a utilização da CPU e da memória se tornará cada vez mais um gargalo, e estou preocupado que o Go possa tornar o high-end do espectro de desempenho significativamente menor do que o C / C ++ / D pode fornecer .

Alguém com experiência em trabalhar no Go nos dá uma ideia da rapidez com que esse afunilamento é atingido (os aplicativos de rede estão sujeitos ao mesmo afunilamento, tipicamente) e o que você pode fazer para relaxá-lo, além de reescrever o afunilamento idioma?

Note que a minha pergunta foi suficientemente diferente da que fiz depois de ler a pergunta relacionada:

Eu tenho uma aplicação específica sobre a qual estou perguntando e limito minhas preocupações ao desempenho (não à usabilidade, suporte a bibliotecas, ferramentas de desenvolvimento, etc.).

    
por Dan 15.04.2013 / 11:15
fonte

3 respostas

1

O que foi dito em outra resposta . Acrescentarei que em idiomas coletados pelo lixo vale a pena escrever o código de uma maneira que seja fácil para o coletor trabalhar.

O Go também possui um profiler que você pode usar ao experimentar amostras de código diferentes. Você também pode consultar o Doozer (escrito por um dos melhores codificadores do Go) e os projetos de amostra (link abaixo) para obter ideias sobre como extrair o máximo de desempenho possível.

link

    
por 17.04.2013 / 19:55
fonte
1

Eu venho a Go como um programador principalmente de "linguagens dinâmicas".

Com isso dito, parece que você fica muito próximo do desempenho do C, desde que você tome o cuidado de fazer as mesmas coisas que faria em um programa C rápido, evite alocações excessivas, escolha seus algoritmos, etc.

O Go facilitará muito todo o processo de ficar livre de bugs, então, considerando o mesmo tempo de desenvolvimento, minha estimativa é que seu desempenho também possa ser semelhante. (Compre com certeza você vai se divertir mais).

    
por 15.04.2013 / 17:58
fonte
0

Na lista de e-mails Go Nuts, link e na minha própria prática, pegou algumas coisas:

  1. There are ways to reduce the amount of garbage created, so less has to be collected, improving performance.

  2. The code generator is still undergoing improvement and is nowhere as mature as gcc, for example.

  3. The ease of parallel programming on multi-cpu servers should, in the large-enough case, make a golang implementation faster. Also, it can actually simplify program logic. Few other concurrency systems can claim that.

  4. Some of the Go standard libraries are better than others. This implies that the others are worse.

  5. The networking code is very good. However, the netchan package was deprecated as too intricate.

  6. You'll have a choice of representing character/string data as byte arrays or as strings. Prefer byte arrays for performance and database storage. Prefer strings for user displays and file names, and to leverage utf8. All Go strings are utf8, byte arrays often are utf8, and arrays of ints are used for utf-32. Converting from one to the other requires an allocation-and-copy, and generates garbage (for later collection).

  7. Generally, pass strings and/or byte arrays as slices, which is like a reference, but has substring semantics.

  8. Go strings are immutable but you can iterate through the characters, which means if it's utf8 data in the string, each iteration can consume more than one byte. Usually that's a great help.

  9. The profiler is essential, I easily sped up a program that used 17 minutes of cpu time in 17 minutes, down to a few seconds. The benchmarking facility provides finer grained information.

  10. Compilation is fast and there is no VM to startup, so compile-and-test is fast.

    
por 01.10.2013 / 17:52
fonte