text: Protothreads是一種低開銷的併發程式設計機制。Protothreads充當無棧的輕量級執行緒或協程，它使用了極小的每protothread記憶體：一個短整數儲存執行位置，一個位元組作為讓步標誌。簡介.Protothreads可用於實現叫做協作式多工的非搶佔形式的併發計算，故而在一個執行緒yield到上次的yield的地方。為了阻塞執行緒，這些yield要透過等待條件來守衛，使得後續的對同樣這個函式的呼叫仍然yield，直到這個條件表示式是為真值為止。protothread的概念是和Oliver Schmidt開發的，基於了Simon Tatham和此前的工作。評價.Protothreads與其他協程或純執行緒實現有關的特徵是它們都是無棧的。這有好處也有壞處。壞處是在protothread內的區域性變數，在經歷了yield而再恢復執行之後，不能信任它們仍保留了原來的值。它們要保持自己的狀態，就必須透過使用靜態變數或函式外部的變數，經常是全域性變數。好處是它們是非常輕量級的，因而可用於很多記憶體受限的系統，就像對於小型微控制器，其他解決方案可能是不現實的或不是真想要的。知名於達夫裝置的，曾評價這種方法的缺點：“探究一種類似在中斷驅動的狀態機中所用到的技巧太恐怖了。[...] 我從來都不認為它是勝任的通用協程實現，因為要擁有一個協程的多個同時活動是不容易的，並且使用這種方法要使協程在除了在頂層例程內以外任何地方放棄控制權都是不可能的。簡單的組合語言棧交換庫就能讓你做到這二者。”
metadata: erhwenkuo/wikipedia-zhtw
metadata: Protothreads
metadata: https://zh.wikipedia.org/wiki?curid=6816135