10 Stimmen

Unterschiede zwischen Coroutines und "goto"?

Ich lese immer, wie schrecklich "goto" ist. Aber heute, als ich über die Google-Programmiersprache las 行く Ich sehe, dass es Coroutines (Goroutines) unterstützt.

Die Frage ist:

Coroutine == GoTo 

Oder

Coroutine != GoTo?

Warum?

2 Stimmen

Sie werden auch feststellen, dass Goroutine != Coroutine. Eine Goroutine ist eher wie ein Thread mit sehr einfacher Erstellung und Verwaltung. golang.org/doc/effective_go.html#goroutines

18voto

Aaron Punkte 8935

Goroutinen sind nicht dasselbe wie ein goto - sie laufen parallel zum Hauptcode. Wenn Sie etwas angeben wie (aus ihrem Beispiel unter http://golang.org/doc/effective_go.html )

go list.Sort();  // run list.Sort in parallel; don't wait for it. 

der Mainline-Code macht weiter - er wartet nicht darauf, dass die Sortierung beendet wird. Die Sortierroutine wird in einem eigenen, leichtgewichtigen Ausführungsstrang gestartet, und wenn die Sortierung abgeschlossen ist, wird dieser Strang beendet.

Ein goto würde dazu führen, dass der Hauptcode zu einem separaten Ausführungspfad verzweigt - so dass die Anweisungen nach der goto würde nie ausgeführt werden.

8voto

Tendayi Mawushe Punkte 24821

Der entscheidende Unterschied besteht darin, dass goto Anweisungen in Sprachen, die sie unterstützen, ermöglichen das Springen an jede beliebige Stelle im Programm mit wenigen oder keinen Einschränkungen. Auch wenn Coroutines auf den ersten Blick ähnlich erscheinen, sind sie doch sehr unterschiedlich.

Coroutinen ermöglichen es, Prozeduren (mit ihrem gesamten Kontext) anzuhalten und an folgenden Stellen wieder aufzunehmen bestimmte Standorte. Während Coroutines also Pausen machen und yield Wenn Sie die Kontrolle an andere Verfahren weitergeben, bevor diese abgeschlossen sind und später wieder aufgenommen werden, sind die Punkte, an denen die Verfahren aufgeben und wieder aufgenommen werden, bereits im Voraus bekannt.

Es ist nicht möglich, einfach zu einer beliebigen Zeile in einer Prozedur zu springen, die betreffende Prozedur muss darauf warten, an einer bestimmten Stelle fortgesetzt zu werden. Diese Übergabe der Kontrolle ist zwar viel strukturierter als bei goto Es ist möglich, verwirrenden Code zu schreiben, indem man diesen mächtigen Mechanismus übermäßig nutzt. Aber ist das nicht bei jeder mächtigen Programmiersprachenfunktion der Fall? ;-)

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X