Go 1.6 verspricht schnelleren Garbage Collector

Michael Thomas

© Shutterstock.com/Krasimira Nevenova

Kaum ist Go 1.5 veröffentlich, arbeitet das Entwicklerteam unter Hochdruck an Version 1.6 der Programmiersprache. Dabei soll vor allem der mit Version 1.5 einer Generalüberholung unterzogene Garbage Collector weiter verbessert werden.

Seit Go 1.5 kann Googles Programmiersprache einen deutlich leistungsstärkeren Garbage Collector vorweisen, der nun nebenläufig arbeitet und teils deutlich geringere Pausenzeiten aufweist zuvor. Meist springt für Go-Programme somit eine Geschwindigkeitszunahme von einigen Prozent heraus, in einem eindrucksvollen Beispiel konnte gar eine Verkürzung der Pause von 300ms auf 4ms erreicht werden.

Für Go 1.6 soll der Garbage Collector weiteren Feinschliff erhalten, wobei u. a. Performance-Verbesserungen unter extremer Last sowie  Änderungen der Algorithmen auf dem Programm stehen. Insgesamt, so die Go-Entwickler Austin Clements und Rick Hudson in einem entsprechenden Planungspapier, stehe Go 1.6 Release klar unter dem Motto „Stabilisierung“.

Ein zu beseitigendes Erbe von Version 1.4 – und einer der zur Zeit größten Flaschenhälse –  ist der zentralisierte GC-Coordinator. Dieser ist eine einzelne Goroutine, die einen großen Teil der zu erledigenden Arbeit an Worker-Goroutinen weiterleitet, was im Endeffekt zu mehr Komplexität und im Extremfall zu nichttrivialen Verzögerungen bei den Phasenübergängen führt. Diesem Umstand soll in Go 1.6 mit einer Ersetzung des GC-Coordiantor durch eine dezentralisierte State-Machine begegnet werden.

Ein weitere Baustelle stellt das von Go 1.5 in zwei Bereichen genutzte Credit-System dar: Einerseits soll es sicherstellen, dass das Sweeping zwischen dem Ende eine GC-Zyklus und dem nächsten Heap-Trigger abgeschlossen wird; andererseits, dass das Scanning zwischen einem Heap-Trigger und der nachfolgenden Zielerreichung des Heaps stattfindet. Ein von Clements und Hudson eingebrachter Verbesserungsvorschlag lautet, dass das System in Zukunft nicht länger „im roten Bereich“ arbeiten soll und somit kein Debt in den nächsten GC-Zyklus übernommen wird.

Laut Clements und Hudson ist zudem die Mark-Termination-Phase hauptverantwortlich für die Pausenzeiten in Go 1.5. Ein Ziel für Go 1.6 ist deshalb, dass sich die meisten Anwendungen unterhalb der 10ms-Schwelle bewegen. Die dafür notwendigen Änderungen umfassen u. a., dass das Scannen der Finalisierer nicht mehr in der Mark-Termination-Phase geschieht, was circa 1ms je Gigabyte der Heapgröße einsparen soll.

Die hier angeführten Beispiele stellen nur einen kleinen Ausschnitt der geplanten Änderungen dar. Weiterführende Informationen, inklusive Verweise auf die entsprechenden GitHub-Issues, können dem von Clements und Hudson verfassten Planungspapier entnommen werden.

Go – das bessere C?

Go wird seit 2007 bei Google entwickelt. Ziel ist die Bereitstellung einer modernen Sprache zur systemnahen Programmierung. Die Go-Syntax ist an C angelehnt und durch Elemente aus der Pascal/Modula/Oberon-Familie sowie aus Newsqueak und Limbo (Nebenläufigkeit) angereichert.

Laut Google soll Go die Vorteile einer interpretierten Hochsprache mit der Effizienz und Sicherheit einer statisch typisierten, kompilierten Sprache verbinden. Etwa wird die Speicherverwaltung wie in Java von einem Garbage Collector erledigt. Typensicherheit soll Variablen-Chaos verhindern. Unterstützung für Multikern-Programmierung, Closures, Reflexion und klassenlose Objektorientierung mittels Interfaces und Mixins gehören zu den weiteren Merkmalen der Sprache.

Aufmacherbild: Go Go Go Concept von Shutterstock / Urheberrecht: Krasimira Nevenova

Geschrieben von
Michael Thomas
Michael Thomas
Michael Thomas studierte Erziehungswissenschaft an der Johannes Gutenberg-Universität Mainz und arbeitet seit 2013 als Freelance-Autor bei JAXenter.de. Kontakt: mthomas[at]sandsmedia.com
Kommentare

Hinterlasse einen Kommentar

Hinterlasse den ersten Kommentar!

avatar
400
  Subscribe  
Benachrichtige mich zu: