Geben Sie die Aufführung ein und wechseln Sie die Leistung in go
in Programmiersprachen und feststellen, dass die Art eines Variablen oder Objekts während der Laufzeit eine grundlegende Operation ist. GO verwendet Typbehauptungen und Typschalter, um diesen Prozess zu erleichtern. Dieser Artikel befasst sich mit den Leistungsmerkmalen dieser Techniken.
Performance Bedenken
In einigen Sprachen wie C/C können die Entdeckung von Laufzeit -Typen Leistungsstrafen entstehen. GO -Programmierer haben darüber nachgedacht, ob Typbehandlungen oder Typ -Switches ähnliche Ineffizienzen aufweisen. Um dies anzusprechen, führen wir einen umfassenden Benchmark aus:
package main import ( "fmt" "testing" ) func question(anything interface{}) { switch v := anything.(type) { case string: fmt.Println(v) case int32, int64: fmt.Println(v) case SomeCustomType: fmt.Println(v) default: fmt.Println("unknown") } }
Der Beispielcode verwendet einen Typ -Switch, um die Art der Eingabevariablen zu bestimmen.
importieren (
"Testen"
)
Geben Sie MyInt int64 ein
Geben Sie die Inccer -Schnittstelle {ein
Inc ()
}
func (i *myint) inc () {
*i = *i 1
}
Func BenchmarkintMethod (B *testing.b) {
i: = neu (myint)
IncnintMethod (i, B.N)
}
Func Benchmarkinterface (B *testing.b) {
i: = neu (myint)
Incninterface (i, B.N)
}
Func BenchmarkTypeSwitch (B *testing.b) {
i: = neu (myint)
INCNSWITCH (I, B.N.)
}
Func BenchmarkTypeasStion (B *testing.b) {
i: = neu (myint)
Incnassertion (I, B.N.)
}
func IncnintMethod (i *myint, n int) {
für k: = 0; k Bei mehreren Testmaschinen zeigen die Ergebnisse konsistent, dass alle vier Methoden mit ähnlichen Geschwindigkeiten durchführen: Direktmethodenaufrufe, Schnittstellenimplementierungen, Typ Behauptungen und Typ -Switches. Das folgende Beispiel zeigt folgende Ergebnisse: BenchmarkintMethod-16 2000000000 1.67 NS/OP
Benchmarkinterface-16 1000000000 2.03 NS/OP
BenchmarkTypeSwitch-16 2000000000 1.70 NS/OP
BenchmarkTypeassertion-16 2000000000 1.67 ns/op Daher sind unsere Schlussfolgerung, dass Typen und Typsschalter in Go keine merklichen Leistungsstörungen im Vergleich zu anderen Typ-Checking-Methoden entstehen.
Haftungsausschluss: Alle bereitgestellten Ressourcen stammen teilweise aus dem Internet. Wenn eine Verletzung Ihres Urheberrechts oder anderer Rechte und Interessen vorliegt, erläutern Sie bitte die detaillierten Gründe und legen Sie einen Nachweis des Urheberrechts oder Ihrer Rechte und Interessen vor und senden Sie ihn dann an die E-Mail-Adresse: [email protected] Wir werden die Angelegenheit so schnell wie möglich für Sie erledigen.
Copyright© 2022 湘ICP备2022001581号-3