协同程序和`goto`之间的差异?
题
我总是读到可怕的事情,“GOTO”是。但今天,阅读有关谷歌编程语言去,我看到它suports协程(够程)。
的问题是:
Coroutine == GoTo
或者
Coroutine != GoTo?
为什么?
解决方案
够程是不一样的一个goto - 它们与所述主代码并行运行。当你说出类似(从他们的榜样在 http://golang.org/doc/effective_go.html一>)
go list.Sort(); // run list.Sort in parallel; don't wait for it.
主线代码继续 - 它不会等待排序完成。排序过程在执行其自己的轻量级线程启动,并在完成后的那种线程退出。
一个跳转会导致主线代码分支到一个单独的执行路径 - 。因此goto
后的语句可能永远不会运行
其他提示
的主要区别是在支持他们允许跳转到任何位置在很少或没有限制的程序语言是goto
语句。而协同程序可能表面上看起来相似,它们有很大的不同。
协程允许程序被暂停(与他们的所有上下文)和位于某些强>位置恢复。因此,尽管协同程序都暂停,yield
控制等程序他们完成之前再后来恢复时,点它的程序产生,并从已知的时间提前恢复。
有不能简单地跳转到一个任意线在一个过程中,所讨论的过程必须等待在特定位置来恢复。尽管这种控制传递是比goto
更加结构化,可以通过过度使用这个强大的机制来编写代码的混乱。再说那就是不与每一个强大的编程语言特性的情况下? ; - )
不隶属于 StackOverflow