Podstawową różnicą jest to, że instrukcje w językach, które je obsługują, umożliwiają przeskakiwanie do dowolnej lokalizacji w programie z niewielkim lub żadnym ograniczeniem. Podczas gdy korundy mogą na powierzchni wyglądać podobnie, są bardzo różne.
Coroutines umożliwiają zawieszanie procedur (z całym ich kontekstem) i wznawianie ich w lokalizacjach określonych. Tak więc, podczas gdy coroutiny przerywają i przechodzą do innych procedur, zanim zakończą, a następnie wznowią później, punkty, z których procedury wychodzą i są wznawiane, są znane z wyprzedzeniem.
Nie można po prostu przeskoczyć do dowolnej linii w procedurze, procedura ta musi czekać na wznowienie w określonej lokalizacji. Chociaż to przejście kontroli jest o wiele bardziej zorganizowane niż w przypadku goto
, możliwe jest napisanie mylącego kodu przez nadużywanie tego potężnego mechanizmu. Czy nie jest tak w przypadku każdej potężnej funkcji języka programowania? ;-)
Przekonasz się również, że Goroutine! = Coroutine. Goroutine jest bardziej jak wątek z naprawdę prostym tworzeniem i zarządzaniem. http://golang.org/doc/effective_go.html#goroutines –