Considerazioni sulle prestazioni durante l'utilizzo di Go for my project

5

Sto guardando usando Go (aka golang) per un progetto (un database SQL, ma per la maggior parte non importa qui) dove le prestazioni sono critiche, ma a basso carico il collo di bottiglia principale sarà I / O su disco . In questo caso, penso che Go sarebbe fantastico!

In caso di carico elevato o quando si colpisce molto la cache, l'utilizzo della CPU e della memoria diventerà sempre più un colli di bottiglia, e sono preoccupato che Go possa rendere l'intervallo di prestazioni significativamente più basso di quello che C / C ++ / D potrebbe fornire .

Chiunque abbia esperienza di lavoro in Go può dare una visione di quanto velocemente viene raggiunto il collo di bottiglia (in genere le applicazioni di rete sono soggette allo stesso collo di bottiglia) e cosa si può fare per rilassarsi in Go oltre a riscrivere il collo di bottiglia in un più veloce lingua?

Nota che la mia domanda era sufficientemente diversa da farla comunque, dopo aver letto la domanda correlata:

Ho un'applicazione specifica a cui sto chiedendo, e ho limitato le mie preoccupazioni alle prestazioni (non usabilità, supporto bibliotecario, strumenti di sviluppo, ecc.)

    
posta Dan 15.04.2013 - 11:15
fonte

3 risposte

1

Che cosa è stato detto in un'altra risposta . Aggiungerò che nei linguaggi raccolti con la spazzatura vale la pena di scrivere il codice in un modo che è facile per il raccoglitore con cui lavorare.

Go ha anche un profiler che puoi usare quando fai esperimenti con diversi esempi di codice. Puoi anche guardare Doozer (scritto da un codificatore Go in alto) e progetti di esempio (link sotto) per idee su come spremere la maggior parte delle prestazioni in uscita.

link

    
risposta data 17.04.2013 - 19:55
fonte
1

Sono venuto per andare come programmatore per lo più in "lingue dinamiche".

Detto questo sembra che tu ti stia avvicinando alle prestazioni C purché ti preoccupi di fare le stesse cose che faresti con un programma C veloce, evitare allocazioni eccessive, scegliere i tuoi algoritmi, ecc.

Go renderà un po 'più facile fare tutto senza bug, quindi dato lo stesso tempo di sviluppo la mia stima è che anche le tue prestazioni possono essere simili. (Compra avrai sicuramente più divertimento).

    
risposta data 15.04.2013 - 17:58
fonte
0

Dalla mailing list di Go Nuts, link e dalla mia pratica, ho raccolto alcune cose:

  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.

    
risposta data 01.10.2013 - 17:52
fonte

Leggi altre domande sui tag