2012-01-08

Coroutines

在 8.6 引進新的 Non-Recursive Engine (NRE) 之後,帶進了新的功能 Coroutines。不過 Coroutine 對我而言是很陌生的東西,所以做一下初學筆記。

在看過網路上對於 Coroutine 的介紹以後,我想可以簡單的總結如下:

Croutine 是自 1960 年代就已經現身的多工實做技術,原理相當單純,在 Coroutine 的 "yield" 是屬於程式語言層面,透過特定技巧或機制,讓原本循序執行的陳述指令,得以做出交錯執行的結果,可以說是 Windows 3.X 「合作式多工」的基礎概念(十分類似)。

用簡單的一句話來說 Coroutine,就是可以暫時中斷,之後再繼續執行的程序。


下面是從 Tcl 8.6 manual page copy 出來的例子:

coroutine accumulator apply {{} {
    set x 0
    while 1 {
        # yield $x: 丟資料並且把主控權交給呼叫者
        incr x [yield $x]
    }
}}

for {set i 0} {$i < 10} {incr i} {
    puts "$i -> [accumulator $i]"
}

manual page 裡還有其它的例子幫助理解,希望我對 Coroutines 的理解是正確的。

沒有留言: