協程

出自維基百科,自由嘅百科全書
Jump to navigation Jump to search

協程coroutine)喺控制流程上係一種子程式嘅廣義化。當個程式要求行一個子程式嗰時,佢會由個子程式開頭嗰度行,行到尾嗰時就離開個子程式;一個子程式衹會行一次,而喺每次行個子程式之間嗰段時間,部電腦唔會儲住「個子程式喺乜狀態」嘅資訊;相比之下,一個協程(協程 A)可以要求另一個協程(協程 B),但離開協程 A 去行協程 B 之後,個程式會記住佢喺邊個點離開協程 A 同埋協程 A 當時嘅狀態,行完協程 B 之後可以返去原先喺協程 A 個位繼續行。一段用協程嘅碼望落大致會係噉嘅[1]

var q := new queue

coroutine produce
    loop
        while q is not full
            create some new items
            add the items to q
        yield to consume

coroutine consume
    loop
        while q is not empty
            remove some items from q
            use the items
        yield to produce

[編輯]

  1. Knuth, Donald Ervin (1997). Fundamental Algorithms. The Art of Computer Programming. 1 (3rd ed.). Addison-Wesley. Section 1.4.2: Coroutines, pp. 193–200.